1
下面的代碼不能用gcc 4.7(20120114)進行編譯,但是可以用鏗鏘聲++ 3.0編譯。這是gcc,clang中的錯誤還是僅僅因爲我在C++ 11中不允許我做什麼?嵌套可變模板:gcc或clang中的錯誤?
template< typename... args >
struct A {
template< typename head, typename... tags >
struct Inner : public Inner<tags...> {
};
template< typename head >
struct Inner<head> {
// assume both args... and tags... must be used to
// calculate TYPE
typedef int TYPE;
};
};
template< typename... args >
struct B : A<args...> {
template<typename... tags>
typename A<args...>::template Inner<tags...>::TYPE x() {
return 0;
}
};
int main(int argc, const char *argv[]) {
B<int, int, int> b;
b.x<char, short, long, double>();
return 0;
}
上面的代碼是什麼,我嘗試做一個很簡單的例子,但本質是,我既需要ARGS ...類型和標籤...類型來計算的返回類型功能。如何才能做到這一點?