私はブースト 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 がアクティブな場合にのみアクティブになる状態で。
バグとして報告する前に、これが Concepts TS/C++1z で意図された動作であるかどうかを最初に確認したかったのです。
ありがとうございました。
編集:以下の回答に基づいて、それはバグであることが判明したため、ここで報告しました。