Когда определены как operator <<(std::ostream&...
, так и общий оператор преобразования template<typename T> operator T()
, std::cout << foo();
неоднозначен. Есть ли способ сделать это решение для вызова operator <<
?Как выбрать `operator <<` over generic `operator T()` conversion?
Кратчайший рабочий код:
#include<iostream>
struct foo {
int x;
template<typename T> operator T() { return static_cast<T>(x); }
friend std::ostream& operator <<(std::ostream& out, foo& f) { return out << f.x; }
};
//std::ostream& operator <<(std::ostream& out, foo& f) { return out << f.x; } // doesn't help
int main() {
std::cout << foo() << std::endl;
return 0;
}
'operator <<' там даже не жизнеспособен, так как 'foo()' является rvalue, а ваш 'operator <<' требует аргумента lvalue. – aschepler
[Этот код работает] (http://ideone.com/dbiawM). –