Следующий код не скомпилирован с 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;
}
Код выше очень упрощенный пример того, что я пытаюсь сделать, но суть в том, что мне нужно обе арг ... типы и теги ... типы вычислить тип возвращаемого значения функция. Как это может быть сделано?