Простое ограничение (концепция) дает внутреннюю ошибку g++
Ниже приведен простой пример, который не компилируется из-за внутренней ошибки g ++ (g++-7.0.1-20170412):
template<typename F>
concept bool FCallable() {
return requires(F) {
F::f();
};
}
class Test1 {
public:
template<FCallable P, FCallable... Pp>
static void g() {
P::f();
}
};
class Test {
public:
template<FCallable... P>
static void g() {
(P::f(), ...);
}
};
class A {
public:
static void f() {}
};
int main() {
Test::template g<A>(); // gives an internal g++ error
Test1::template g<A>(); // gives the same error
}
Это настоящая ошибка? То есть: я использую нелегальный код или это ошибка в g++? Кстати: если я опущу ограничение FCAllable и использую typename... здесь все идет хорошо.