私はいくつかのコードを持っています。
#include <iostream>
template<typename T>
struct Test
{
Test(bool v):flg(v) { }
void func() { }
typedef void (Test::*unspecified)();
operator unspecified() const
{
return flg ? &Test::func : 0;
}
bool flg;
};
template<typename T>
std::ostream& operator << (std::ostream&, typename Test<T>::unspecified);
int main()
{
Test<int> t(true);
std::cout << t << std::endl;
}
出力は
1
正常に動作しますが、未定義の参照を取得したいと思います。もしそうならTest
、not template class
私は未定義の参照を取得します。では、なぜコンパイラは関数型に使用せず、からへoperator <<
の標準変換を行うのでしょうか。pointer to class-member
bool