为什么这个默认函数参数导致解析器失败?

时间:2014-04-14 13:50:14

标签: c++ templates gcc

以下程序不合法C ++ 03吗?它是否揭示了旧的GCC错误?它知道了吗?

template <typename T, typename U>
struct A
{};

template<class T>
struct B
{};


template <typename T, typename U>
struct B<A<T, U> >
{
    B(const A<T, U>& a = A<T, U>()) {};
};

int main() {}

它使用GCC 4.8为我编译,但GCC 4.3.3(Sourcery G ++ Lite 2009q1-203)拒绝使用以下内容:

test.cpp:13: error: expected ',' or '...' before '>' token
test.cpp:13: error: wrong number of template arguments (1, should be 2)
test.cpp:2: error: provided for 'template<class T, class U> struct A'
test.cpp:13: error: default argument missing for parameter 2 of 'B<A<T, U> >::B(const A<T, U>&, U)'

当我删除默认构造函数参数或用括号括起表达式时,两个编译器都会愉快地构建它:

B(const A<T, U>& a = (A<T, U>())) {};
//                   ^         ^

0 个答案:

没有答案