當試着編譯這個(CRTP樣)代碼GCC 4.6.0:沒有在模板類名爲X類模板
template<template<class> class T> struct A;
template<class T>
struct B: A<B<T>::template X> {
template <class U> struct X { U mem; };
};
B<int> a;
我得到的errormessage的「TEST.CPP:3:26:錯誤: 'struct B <int>''中沒有名爲'X'的類模板。爲什麼X似乎在類定義之外是不可見的?
我的編譯器有一個問題,這樣的: :A < B ::模板X> X是未聲明的標識符。我坦率地被你的語法弄糊塗了,什麼是B :: template應該是?除此之外,我從未見過:模板 T類。如果有的話,我想我會從你身上學到一些東西;你能解釋一下語法的重要性嗎?這些是什麼? –
leetNightshade
2011-04-26 18:01:39
我不確定,但也許約翰尼斯從這個主題的答案可能在這裏幫助:http://stackoverflow.com/questions/4420828/another-bug-in-g-clang-c-templates-are-fun – Nawaz 2011-04-26 18:04:05
@leetNightshade :我不確定,但我認爲你的錯誤信息實際上和我說的是一樣的東西:X在B以外是不可見的(反正我也是這麼理解的)。關於你的第二個問題:「模板 T類」意味着T本身是模板化的。就像那樣,你可以在A的類定義裏面使用類似T 的東西。 –
2011-04-26 18:07:56