Пример кода:
class A
{
static constexpr auto GetInt() noexcept { return 6; }
template<int N>
std::enable_if_t< N >= GetInt(), int> func() { return N; }
};
И Clang, и MSVC заявляют, что GetInt()
нельзя использовать, потому что он еще не определен, однако GCC компилируется без ошибок или предупреждений.
Мое лучшее предположение относительно того, почему возникает ошибка, заключается в том, что, поскольку класс является неполным в момент, когда func()
, функции-члены считаются неопределенными, и поскольку auto полагается на определение функции для вывода типа возвращаемого значения, компилятор не может использовать его для генерации сигнатура функции.
Однако это не объясняет, почему GCC это разрешает. Это неправильно?