Простое ограничение (концепция) дает внутреннюю ошибку 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... здесь все идет хорошо.

0 ответов

Другие вопросы по тегам