クラスに次のような特別なメンバー関数がある場合は、テンプレートを特殊化しようとします(別の例でここにあります)。
template <typename T>
class has_begin
{
typedef char one;
typedef long two;
template <typename C> static one test( decltype( &C::AnyFunc) ) ;
template <typename C> static two test(...);
public:
enum { value = sizeof(test<T>(0)) == sizeof(char) };
enum { Yes = sizeof(has_begin<T>::test<T>(0)) == 1 };
enum { No = !Yes };
};
AnyFunc
これは、過負荷になるまでうまく機能します。
class B : public vector<int>
{
public:
void AnyFunc() const;
void AnyFunc();
};
テンプレートから「はい」を取得するようにテストコードを書き直すにはどうすればよいですか?