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 );
}