problem using template and namespaced friend class in CUDA I can't compile

namespace hoge {
template <class T>
class Bar;
}

template <class T>
class Foo
{
	int a;

	template <class U> friend class hoge::Bar;
};

namespace hoge {

template <class T>
class Bar
{
public:
	Bar(::Foo<T>& foo)
	{
		foo.a = 123; // Can't access Foo's member
	}
};

}

void test()
{
	Foo<int> foo;

	hoge::Bar<int> b( foo );
}

Does CUDA support such C++ features?

If Bar is global template class ‘template class ::Bar’ or not template class but namespaced class
‘class hoge::Bar’, I can compile the code.
But above code of ‘template class hoge::Bar’ can not be compiled.
template friend and namespace friend are respectively supported.
template namespace friend is not supported. Is this something special feature?

//-------------------- No problem ------------------------
template <class T>
class Bar;

template <class T>
class Foo
{
	int a;
	template <class U> friend class Bar;
};

template <class T>
class Bar
{
public:
	Bar(Foo<T>& foo)
	{
		foo.a = 123;
	}
};

void test()
{
	Foo<int> foo;
	Bar<int> bar( foo );
}

//-------------------- No problem ------------------------
namespace hoge {
class Bar;
}

template <class T>
class Foo
{
	int a;
	friend class hoge::Bar;
};

namespace hoge {

class Bar
{
public:
	template <class T>
	Bar(::Foo<T>& foo)
	{
		foo.a = 123;
	}
};

}

void test()
{
	Foo<int> foo;
	hoge::Bar bar( foo );
}