1
次のコードはgcc 4.7(20120114)でコンパイルされませんが、clang ++ 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;
}
上記のコードは、私がやろうものの非常に単純化した例であるが、本質は、私は引数...種類とタグの両方を必要とするということです...種類関数。これはどうすればできますか?