I am making a templated class that is a wrapper around any iterator. I am making the operator* this way:
template <typename T>
class MyIterator {
public:
//...
decltype(*T()) operator*() {
//...
}
}
I give decltype a invocation to operator* of class T, and it even works, but if T doesnt have default constructor it wont work.
Is there anyway to find out the returned type of a function/method ?
This is what
std::declvalis for:If your implementation does not provide
std::declval(Visual C++ 2010 does not include it), you can easily write it yourself:Since
Tis an iterator type, you could also use thestd::iterator_traitstemplate, which does not require any C++0x support: