2017-01-07 12 views
0

Пусть у меня есть шаблонный классconstexpr функция условно член

template <typename T> 
class foo { 
    T m; 

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

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

ответ

3

Вы просто хлопнуть constexpr на нем:

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

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