Когда я объявляю шаблонный шаблон класса шаблона, тип аргумента которого задается псевдонимом шаблона, я получаю ошибку компиляции. Если я изменил класс шаблона на класс, он скомпилируется. Если я заменил псевдоним шаблона на фактический тип (здесь Templ<bool>
), он тоже скомпилируется. Почему это не работает, когда это класс шаблона и, тип аргумента является псевдонимом шаблона?Псевдоним шаблона не работает в аргументе шаблона шаблона шаблона
Компилятор gcc версии 4.8.0 (Ubuntu/Linaro 4.8.0-2ubuntu2 ~ 12.04).
template <template <typename T> class Templ>
using Bool = Templ<bool>;
template <typename T>
class Foo {
private:
public:
template<template<typename U> class Templ>
void method(Bool<Templ> boolTempl);
};
template <typename T>
template <template <typename U> class Templ>
void Foo<T>::method(Bool<Templ> boolTempl) {
}
int main() {
Foo<char> foo;
return 0;
}
g++ templTest12.C -o templTest12 -std=c++11
templTest12.C: In substitution of `template<template<class T> class Templ> using Bool = Templ<bool> [with Templ = Templ]':
templTest12.C:17:6: required from `class Foo<char>'
templTest12.C:30:12: required from here
templTest12.C:2:25: error: `template<class U> class Templ' is not a template
using Bool = Templ<bool>;
подтверждаю, что. Я тестировал gcc версии 4.7.3, и он компилируется отлично. – user2360448
Я зарегистрировал [отчет об ошибке] (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57222). – user2360448