ここにコードがあります
#include <iostream>
template<typename T>
class IsReference {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(C*);
template<typename C> static Two test(...);
public:
enum { val = sizeof(IsReference<T>::test<T>(0)) == 1 };
enum {result = !val};
};
template < class T>
void foo(T t){
std::cout<< IsReference<T>::result << "\n";
}
class C{
public: int a;
};
int main(){
C c1;
C &c2 = c1;
foo(c1);
foo(c2);
}
出力は、私が望まないもの0
でもあります。foo(c2)
内部で参照型foo
かどうかを確認するにはどうすればよいですか? つまり、関数がどのタイプでインスタンス化されているかわからないT
ため、呼び出したくありません。foo
foo<C&>(c2)