Функции, отмеченные как constexpr, должны быть неизменными чистыми функциями. Из сообщения "std :: max () и std :: min () not constexpr" вы не можете повторно направить вход const-reference в качестве вывода, так как для этого потребуется параметр иметь постоянство. Но можете ли вы взять параметр по const
-ссылке, если вы не переадресовали его?
// Is this still constexpr?
// (Assuming that std::complex is constexpr-safe, as it's supposed to be.)
constexpr
int MySum( std::complex<double> const &a, std::complex<double> const &b )
{ return static_cast<int>( a.real() + b.real() ); }
И наоборот, вы можете вернуть const-ссылку на подобъект типа constexpr
-enabled?
template <typename T>
class MyComplex
{
T c_[ 2 ];
public:
constexpr MyComplex( T r = T(), T i = T() )
: c_{ r, i }
{}
// Is this actually constexpr?
constexpr T const & operator[]( unsigned l ) //const
{ return c_[ l ]; }
// Can't be constexpr
T & operator[]( unsigned l ) { return c_[ l ]; }
};
Или даже возвращаемые субобъекты должны быть по значению?
(Извините, если это просто, но все, что я нашел, танцует вокруг этой точки, фактически не будучи окончательным.)