给定这个例子,其中包括一些重载:
#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;
?任何人都可以引用涵盖此案例的标准的特定部分吗?