9
나는 iterator 주위의 wrapper 인 templated 클래스를 만들고있다. 나는 운영자 * 이런 식으로 만드는 중이라서 :함수 반환을위한 Decltype
template <typename T>
class MyIterator {
public:
//...
decltype(*T()) operator*() {
//...
}
}
내가 클래스 T의 운영자 *에 decltype 호출을 줄을, 그것도 작동하지만, T 나던 기본 생성자 실 거예요 작업이있는 경우.
반환되는 함수/메서드 유형을 확인하려면 어떻게해야합니까? 구현이 std::declval
은 (비주얼 C++ 2010를 포함하지 않습니다), 당신은 쉽게 스스로를 쓸 수 있습니다 제공하지 않는 경우
decltype(*std::declval<T>()) operator*() { /* ... */ }
:이 std::declval
가 무엇인지입니다
제 컴파일러는 "declall()을 사용하면 안됩니다!"라고 말합니다. –
컴파일러는 정확히 무엇을 사용합니까 (그리고 어떤 컴파일러를 사용합니까?) 정의되지 않았기 때문에 _ODR-use_'declval'을 사용할 수 없습니다. 평가되지 않는 컨텍스트에서만 "사용"할 수 있습니다. 'decltype'에서. –
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../include/c++/4.6.1/type_traits:1134:7 : 오류 : 정적 어설 션 failed : "declval()을 사용하면 안됩니다!" –