以下程序不合法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>())) {};
// ^ ^