我正在尝试专注Outer<P>::Inner于如下所示的类型P,并且它似乎可以工作(在 gcc 4.5.3 和 Visual Studio 2008 上),直到Inner i在Outer<P>. 有没有一种方法可以在Inner i没有专门的情况下声明Outer<P>?
#include <cstdlib>
#include <iostream>
template<typename T>
struct Outer
{
Outer()
{
Inner();
}
struct Inner;
//Inner i; // compilation error
};
template<>
struct Outer<bool>::Inner
{
Inner()
{
std::cout << "Specialization ..." << std::endl;
}
};
template<typename T>
struct Outer<T>::Inner
{
Inner()
{
std::cout << "Generic version ..." << std::endl;
}
};
int main()
{
Outer<char> o2;
Outer<bool> o1;
return EXIT_SUCCESS;
}