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 afooconstrutor 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?

questionAnswers(3)

yourAnswerToTheQuestion