模板别名在模板类模板方法的参数中不起作用

时间:2013-05-08 01:28:39

标签: c++ templates gcc c++11 template-aliases

当我声明模板类的模板方法,其模型类的参数类型由模板别名指定时,我得到编译错误。如果我将模板类更改为类,则编译。如果我用实际类型(这里是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>;

1 个答案:

答案 0 :(得分:3)

这似乎是gcc 4.8.0中的回归,因为gcc 4.7.2确实编译了两个版本而没有错误。标准14.1 / 2明确指出

  

a中的class和typename之间没有语义差异   模板参数。