GCC ICE(segfault)和clang编译得很好:这是有效的代码吗?

时间:2016-11-04 20:28:49

标签: c++ templates g++ clang language-lawyer

请考虑以下代码段:

template<typename...>
struct S;

template<typename R, typename... A, typename... T>
struct S<R(A...), T...> {
    template<R(T::* ...M)(A...)>
    void f() {}
};

struct A { void f() {} };
struct B { void f() {} };

int main() {
    S<void(void), A, B> s;
    s.f<&A::f, &B::f>();
}

Clang(3.9)编译它没有错误 GCC(6.2)有一个ICE(实际上是 segfault ):

/data/user/0/com.n0n3m4.droidc/files/temp.c: In function 'int main()':
/data/user/0/com.n0n3m4.droidc/files/temp.c:20:23: internal compiler error: Segmentation fault
     s.f<&A::f, &B::f>();
                ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

除了由于 segfault 而我已经向GCC提出问题这一事实外,上述代码是否有效?
换句话说,clang是正确地接受它还是应该被两个编译器拒绝?

Here是向GCC开放的问题。

0 个答案:

没有答案