この例では、いくつかのオーバーロードが含まれています。
#include <iostream>
class T
{
public:
operator const wchar_t *(void) const
{
std::cout << "Conversion" << std::endl;
return L"Testing";
}
};
template <class Elem>
class A
{
};
template <class T>
void operator <<(A<T> &, const T *)
{
std::cout << "1" << std::endl;
}
template <class T>
void operator <<(A<T> &, const void *)
{
std::cout << "2" << std::endl;
}
int main(void)
{
A<wchar_t> test;
T source;
test << L"1";
test << static_cast<const wchar_t *>(source);
test << source;
}
そしてその出力:
1
Conversion
1
Conversion
2
私の質問は-なぜvoid operator <<(A<T> &, const void *)
声明を求められているのtest << source;
ですか?誰かがこのケースをカバーする規格の特定の部分を引用できますか?