The following fails under VC8 Beta2:
namespace A {
// forward decl.
template <typename Type, typename TypeX>
bool foo(const Type&, const TypeX&);
} // namespace A
namespace A {
namespace B {
template <typename Type>
struct S
{
template <typename Type, typename TypeX>
friend bool ::A::foo(const Type&, const TypeX&); // error C2888
protected:
template <typename TypeX>
static bool bar(const Type& a, const TypeX& b)
{
return a == b;
}
};
} // namespace B
template <typename Type, typename TypeX>
bool foo(const Type& a, const TypeX& b)
{
return B::S<Type>::bar(a, b);
}
} // namespace A
int main()
{
}
The error message is:
..\Test.cpp(114) : error C2888: 'bool A::foo(const Type &,const TypeX
&)' : symbol cannot be defined within namespace 'B'
..\Test.cpp(122) : see reference to class template instantiation
'A::B::S<Type>' being compiled
Can someone explain why?
Thanks,
- NK