Вы можете сделать ответ Synxis (использование параметра фиктивного значения по умолчанию) еще более чистым с C ++ 11:
/// template <typename X>, not needed for the example
struct Outer
{
private:
template <typename A, typename D = void>
struct Inner
{
Inner() { cout << "default" << endl; }
};
template <typename D>
struct Inner<int,D>
{
Inner() { cout << "int" << endl; }
};
public:
template <typename T>
using Nested = Inner<T>;
};
Преимущество этого улучшения в том, что подпись Nested имеет только один параметр шаблона , который, я думаю, поможет, если вы хотите правильно его сопоставить в мета-программировании шаблона.