#include <string>
#include <type_traits>
class C
{
static auto func() { return std::string("hello"); }
static_assert(std::is_same<decltype(func()), std::string>::value, "");
};
Ни GCC, ни Clang не принимают это, заявив, что func
используется до его определения. Зачем?Почему этот встроенный метод с выведенным типом возврата еще не определен?
Изменение выведенного auto
типа возврата в std::string
заставляет его работать.
встраиваемая функция есть, как если бы вы написали их право * после * конец определения класса, так что в точке 'static_assert' , функция еще не определена. –
@KerrekSB, но с изменением типа возвращаемого значения на явный, он компилирует штраф – Danra
Несомненно, но вся точка 'auto' заключается в том, чтобы вывести тип из определения ... –