Учитывая этот пример, который включает в себя несколько перегруженных перегрузки:C++ оператор преобразования и разрешение
#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;
? Может ли кто-нибудь указать конкретную часть стандарта, который охватывает этот случай?
Нет, этот пример был структурирован после того, как работает iostreams. (Почти). В частности, я использовал класс, у которого был оператор преобразования, для const wchar_t *, и неясно, почему вызывался перегруженный оператор '<< (.., const void *)' для широкоформатная версия потока. – DOS