Данный пример содержит несколько перегрузок:
#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;
?Кто-нибудь может привести конкретную часть стандарта, которая охватывает этот случай?