Кажется, что следующий вывод программы противоречит самому себе:
#include <type_traits>
#include <iostream>
#include <functional>
void foo(int&){ std::cout << "called\n"; }
int main() {
int a;
foo(a);
std::cout << std::is_invocable_v<decltype(foo), decltype(a)> << std::endl;
std::invoke(foo, a);
}
Выход:
called
0
called
Кажется, что я вызываю функцию, которая не является invocable? Что здесь происходит?