Declaring friend template class template in C++1z produces error: specialization of ‘template<class T> class A’ must appear at namespace
Declaring friend template class template in C++1z produces error: specialization of ‘template<class T> class A’ must appear at namespace
我正在使用 boost asio 协程,我想使用新的文件系统 TS (-stdc++fs),所以我升级到 GCC 6-20151025 快照。它运作良好。但是后来我打开了 -std=c++1z,我在 boost 的源代码中遇到了一个错误。我隔离了错误,这是一个最小的例子:
// { dg-do compile }
// { dg-options "-std=c++1z" }
template< typename T >
class A
{
};
template<>
class A< void >
{
template< typename X >
friend class A;
};
使用 -std=c++14 可以很好地编译,但对于 -std=c++1z 会生成以下错误:
error: specialization of ‘template<class T> class A’ must appear at namespace scope
friend class A;
^
我追踪了源代码中的错误,pt.c 中新引入的函数“maybe_new_partial_specialization”的行为似乎有所不同。特别是在 Concepts TS 为 active.
时才激活的情况下
我想先检查一下这是否是 Concepts TS/C++1z 中的预期行为,然后再将其报告为错误。
谢谢。
编辑:根据下面的答案,结果证明这是一个错误,因此我已经报告了它 here。
向后兼容性问题在概念文件的附件 A 中进行了总结。它只包含一个条目:
您遇到的行为不是故意的,是倒退,请举报。
我正在使用 boost asio 协程,我想使用新的文件系统 TS (-stdc++fs),所以我升级到 GCC 6-20151025 快照。它运作良好。但是后来我打开了 -std=c++1z,我在 boost 的源代码中遇到了一个错误。我隔离了错误,这是一个最小的例子:
// { dg-do compile }
// { dg-options "-std=c++1z" }
template< typename T >
class A
{
};
template<>
class A< void >
{
template< typename X >
friend class A;
};
使用 -std=c++14 可以很好地编译,但对于 -std=c++1z 会生成以下错误:
error: specialization of ‘template<class T> class A’ must appear at namespace scope
friend class A;
^
我追踪了源代码中的错误,pt.c 中新引入的函数“maybe_new_partial_specialization”的行为似乎有所不同。特别是在 Concepts TS 为 active.
时才激活的情况下我想先检查一下这是否是 Concepts TS/C++1z 中的预期行为,然后再将其报告为错误。
谢谢。
编辑:根据下面的答案,结果证明这是一个错误,因此我已经报告了它 here。
向后兼容性问题在概念文件的附件 A 中进行了总结。它只包含一个条目:
您遇到的行为不是故意的,是倒退,请举报。