Template argument not displayed for inner class

I want to do something like this:

#include <iostream> template<typename T> class myclass { T something; public: myclass(T something) : something{ something } { } struct result { T value; }; result get_result() { return{ something }; } }; template<typename T> std::ostream& operator<<(std::ostream& stream, const typename myclass<T>::result& res) { return stream << res.value; } int main() { myclass<int> m(0); std::cout << m.get_result() << "\n"; } 

In this case, neither gcc nor msvc find the overloaded stream operator when I insert the result (which depends on the template outer class). Am I trying to make it even possible?

+7
c ++ c ++ 11 templates
source share
1 answer

T not deductible for myclass<T>::result .

You can define operator<< inside the class to solve your problem:

 struct result { T value; friend std::ostream& operator<<(std::ostream& stream, const result& res) { return stream << res.value; } }; 

Demo

+13
source share

All Articles