template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
そして私はNested
を専門としたいです。ここで私が試した何:
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
template <>
class Nested<int>{}; // by my logic this should work by I have a compilation error "explicit specialization in non-namespace scope 'class A<C, T>'"
Nested<T> n;
};
私の次の試み:それは完璧に動作
template<typename C, typename T>
class A
{
template <typename U, bool Dummy = true>
class Nested{}; // why need of this Dummy??
template <bool Dummy>
class Nested<int, Dummy>{}; // why need to provide an argument??
Nested<T> n;
};
が、私はどのように理解することはできません:StackOverflowの上ここで
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
template<>
A<>::Nested<int>{}; // What is the correct syntax to do it here? Now I have an error "wrong number of template arguments (0, should be 2)"
を私が解決策を見つけました。なぜダミーのテンプレート引数を提供するのですか?生の専門化template<> class Nested<int, true>{}
またはtemplate<> class Nested<int>{}
を使用できないのはなぜですか?
はい、gccとclangでは実行されません。マイクロソフト社のような、標準に準拠していないもの。あるいは、コンパイラスイッチがあります。 – nikitablack