Je lisais la question de litb sur SFINAE here et je me demandais exactement ce que son code déclarait. Un simple (sans modèles) est par exemple ci-dessous:Est-ce que cette ligne déclare une fonction? C++
int (&a())[2];
Qu'est-ce exactement que la déclaration? Quel est le rôle du &? Pour ajouter à ma confusion, si je déclare ce qui suit à la place
int b()[2];
Je reçois une erreur sur la déclaration d'une fonction qui retourne un tableau, alors que la première ligne n'a pas une telle erreur (donc, on pense que la première déclaration est pas une fonction). Cependant, si je tente d'attribuer un
a = a;
Je reçois une erreur disant que je tente d'assigner la fonction d'un ... maintenant il est une fonction. Quelle est exactement cette chose?
J'ai utilisé cette construction plutôt étrange pour voir quelle fonction était appelée. sizeof (a()) vous donnera sizeof (int [2]).L'autre fonction serait déclarée int (& a()) [1]; et si celui-là était appelé, cela donnerait sizeof (int [1]). Il utilise le fait que pour tout T, sizeof (T &) == sizeof (T) –