Условно функция-член constexpr

Предположим, у меня есть шаблон класса

template <typename T>
class foo {
    T m;

    decltype(auto) f() { return m.f(); }
};

Как я могу дать foo:f() спецификатор constexpr, только если T::f() такое консекстр?

1 ответ

Решение

Вы просто ударили constexpr в теме:

constexpr decltype(auto) f() { return m.f(); }

Да, это все еще в силе, даже если T::f() не constexpr; такую ​​функцию просто нельзя использовать в константных выражениях. Смотрите [dcl.constexpr] / 6.

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