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>::call_f()
である場合でも、Wrapper<int>
がインスタンス化されます(int::f()
はありません)。 w2.call_f()
が呼び出されたときだけ失敗します。未定義のメンバー関数の戻り値の型を持つテンプレートのインスタンス化
この部分はC++標準であり、すべてのコンパイラで動作することが期待できますか?