Tworzę szablonową klasę, która jest opakowaniem wokół dowolnego iteratora. Robię operatorowi * w ten sposób:Decltype for return of function
template <typename T>
class MyIterator {
public:
//...
decltype(*T()) operator*() {
//...
}
}
daję decltype na wezwanie do napędu * klasy T, a nawet działa, ale jeśli robi T mieć domyślnego konstruktora to przyzwyczajenie praca.
Czy mimo to można znaleźć zwracany typ funkcji/metody?
Mój kompilator mówi "nie można używać funkcji declval()!" –
Co dokładnie mówi twój kompilator (i jakiego używasz kompilatora?) Nie można _ODR używać '' declval', ponieważ nie jest zdefiniowane; możesz "użyć" go tylko w kontekstach, w których nie będzie on oceniany, np. w "decltype". –
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../include/c++/4.6.1/type_traits:1134:7: błąd: asercja statyczna nie powiodło się: "declval() nie może być użyty!" –