C++では、ネームスペースとグローバルスコープ以外のスコープ(MS VSC++エラーC3412)ではメンバーテンプレートの特殊化が許可されていないようです。しかし、私にとっては、派生クラスの基本メンバテンプレートを派生クラスに特化するのは理にかなっています。なぜなら、派生クラスはそれが基本クラスのものを特殊化するからです。たとえば、次の例を考えてみましょう。メンバテンプレートの特殊化とそのスコープ
struct Base
{
template <class T>
struct Kind
{
typedef T type;
};
};
struct Derived : public Base
{
/* Not Allowed */
using Base::Kind;
template <>
struct Kind <float>
{
typedef double type;
};
};
int main(void)
{
Base::Kind<float>::type f; // float type desired
Derived::Kind<float>::type i; // double type desired but does not work.
}
私の質問はなぜ許可されていないのですか?
ところで、g ++にバグ#39906(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39906)のバグがあり、同様のコードを誤って受け入れています。しかし、ComeauとVC++はそうではありません。 – Sumant