struct Value {
using a_type = int;
a_type f() { return 1; }
};
template<typename T>
struct Wrapper {
T t;
auto call_f() { return t.f(); }
};
int main() {
Wrapper<Value> w;
Wrapper<int> w2;
w.call_f();
}
이 코드는 Clang 및 GCC에서 잘 컴파일됩니다. Wrapper<int>
은 Wrapper<int>::call_f()
의 반환 유형을 추론 할 수 없더라도 인스턴스화됩니다 (int::f()
이 없음). w2.call_f()
이 호출 될 때만 실패합니다.정의되지 않은 멤버 함수 반환 유형이있는 템플릿 인스턴스화
이 부분은 C++ 표준이며, 모든 컴파일러에서 작동 할 것으로 기대할 수 있습니까?