0

プログラム:

#include <iostream>

#include <type_traits>

template <class C>
struct tmpl
{
};

int main(int, char*[])
{
  std::cout << std::is_class<tmpl<int> >::value << std::endl;
  std::cout << std::is_class<tmpl<char> >::value << std::endl;
  return 0;
}

出力:

1
1

しかし、私はコンパイラがテンプレートクラスtmpl<int>tmpl<char>まだインスタンス化されていないことを理解して出力したいと思っています0。出来ますか?私の例で実際にクラス テンプレートtmplをインスタンス化しましたか?

4

3 に答える 3

2

タイプに名前を付けることで、インスタンス化します。コンパイラを参照するとすぐにtmpl<SomeTypeNamedFoo>、ユーザーに代わって自動インスタンス化されます。

于 2013-03-21T14:56:52.153 に答える
1

いいえ、そうではありません。is_classクラスかどうかを確認します(たとえば、列挙型ではありません)。tmplSFINAE でインストールを中断すると、コンパイル エラーが発生します。

たとえば、次のようにします。

template <>
struct tmpl<int>{ char off[-1];};
于 2013-03-21T14:55:21.433 に答える