でこのコードは打ち鳴らす3.7.1(なし診断付き)でコンパイルしますが、GCC5.3.0(live example)で失敗しない:テンプレート友情エラーのコンパイルが、打ち鳴らす
#include <iostream>
template<typename T>
struct A {
void foo()
{
static_cast<T*>(this)->implementation();
}
};
struct Crtp : A<Crtp> {
template<typename T>
friend struct A;
private:
void implementation() { std::cout << "implementation()\n"; }
};
int main()
{
Crtp c;
c.foo();
}
GCCのエラーメッセージは以下の通りです:
右である1main.cpp:13:16: error: specialization of 'A' after instantiation friend struct A;
、なぜ?それはGCC/clangのバグですか?
あなたが正しいです。さらに、gccには多くの[友人の問題](https://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=65608&hide_resolved=1)があるようです。 – akakatak