sky*_*ack 5 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>();
}
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
除了由于 segfault 我已经向 GCC 提出问题之外,上面的代码是否有效?
换句话说,clang 是否正确接受它,还是应该被两个编译器拒绝?
这是向 GCC 提出的问题。
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |