Le résultat du programme suivant semble se contredire :
#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);
}
La sortie est :
called
0
called
Ce qui me semble être l'invocation d'une fonction qui n'est pas invocable ? Qu'est-ce qui se passe ici ?
1 votes
Basé sur une intuition, est-ce que ça change si
foo
accepte une référence const lvalue à la place ?0 votes
@StoryTeller Oui ( coliru.stacked-crooked.com/a/5d8a4615fda8e8b4 ), mais pouvez-vous expliquer pourquoi ?