clang bug? amigo da classe de modelo com namespace
O código a seguir que não é compilado no clang, mas no gcc e no VS:
template<typename T> class bar;
namespace NS
{
template<typename T>
class foo
{
foo() {}
template<typename U> friend class bar;
};
}
template<typename R>
class bar
{
public:
bar()
{
NS::foo<int> f;
}
};
int main(int, char **)
{
bar<int> b;
return 0;
}
Falha com:
main.cpp:20:22: error: calling a private constructor of class 'NS::foo<int>'
NS::foo<int> f;
^
main.cpp:8:9: note: implicitly declared private here
foo() {}
^
bar
deve ter acesso afoo
construtor privado, mas parece que não. Se eu removernamespace NS
, ele compila.
O código parece bom para mim, mas talvez eu esteja entendendo mal o padrão C ++. Qual compilador está correto?