В следующем коде main
возвращает 2
, в то время как я ожидаю, что он вернет 0
(или, по крайней мере, 7
)
extern struct S s;
template<typename T>
constexpr int global(T&) { return 0; }
template<typename T>
//constexpr
int func(T& t) { return global(t); }
int main()
{
return global(s) + 2*func(s) + 4*([](auto &a){return global(a);})(s);
}
static constexpr int global(S&) { return 1; }
Этот код также включен https://godbolt.org/z/RkkXwf
Если я раскомментирую constexpr
на func
, результат изменится на ожидаемый 0
.
Из того, что я понимаю, разрешение перегрузки должно учитывать только функции до точки создания шаблона.Но каким-то образом он находит тот, который объявлен после этой точки для контекста, который не является ни constexpr
, ни общей лямбдой.
Почему эти три поиска находят разные функции?