Visual C++でしかコンパイルできないコードその2です。今回は「メンバーテンプレートの明示的特殊化をクラス定義内に書く」です。

class hoge
{
  template<typename T>
  class piyo {};
  template<>
  class piyo<int> {};
};

GCCやClangではコンパイルエラーになります。一方、Visual C++は2013でも通してしまいます。

正しくは、このようにクラス定義の外に書きます。

class hoge
{
  template<typename T>
  class piyo {};
};
 
template<>
class hoge::piyo<int> {};

たまにGCCやClangでコンパイルすると、こういう発見があって面白いです。これを読んでくださっている皆様は、ぜひこのようなコードを書かないようにしましょう。

スポンサード リンク

この記事のカテゴリ

  • ⇒ Visual C++でしか動かないコード:明示的特殊化
  • ⇒ Visual C++でしか動かないコード:明示的特殊化