sfinae mit decltype: fehler in clang oder gcc?

Clang-3.2 kann sich wie erwartet kompilieren und codieren:

struct have_f { int f(int i) {return 10;} }; 

struct empty {};

template <class T> 
struct outer {
        T t; 

        // if T have f(), define  outer_f()
        template<class U=decltype(t.f(1))> 
        int outer_f(int i) { return t.f(i); }
};

int main() {
        outer<have_f>  o1;
        outer<empty>   o2;

        // to silence unused var warning
        return  o1.outer_f(10) + sizeof(o2); 
}

GCC jeder Version lehnt ab mit:

t.cc:13:6: error: ‘struct empty’ has no member named ‘f’
  int outer_f(int i) { return t.f(i); }
      ^

Wer ist richtig? Gcc oder Clang?

Beachten Sie, dass es gabähnliche Frage, ohne echte Antwort.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage