vendredi 8 septembre 2017

Constexpr member function in class template

The following code fails to compile:

// template<class>
struct S {
    int g() const {
        return 0;
    }

    constexpr int f() const {
        return g();
    }
};

int main()
{
    S /*<int>*/ s;
    auto z = s.f();
}

GCC, for example, complains: error: call to non-constexpr function ‘int S::g() const’. This is perfectly reasonable. But if I turn S into a template, the code compiles (checked with MSVC 15.3, GCC 7.1.0, clang 4.0.1).

Why? Does constexpr has any special meaning in class templates?

Aucun commentaire:

Enregistrer un commentaire