Je m'excuse de ne pas avoir assez de temps pour faire une enquête approfondie et de compter sur votre aide à la place.C++ 14 + déduction de type automatique pour l'argument avec la valeur par défaut
Tenir compte du code simple:
#include <iostream>
enum class PrintColour
{
COLOUR_1 = 0,
COLOUR_2 = 1,
};
void colour(auto c = PrintColour::COLOUR_1)
{
switch (c)
{
case PrintColour::COLOUR_1:
std::cout << "Colour 1" << std::endl;
break;
case PrintColour::COLOUR_2:
std::cout << "Colour 2" << std::endl;
}
}
int main()
{
// colour(); couldn't deduce template parameter ‘auto:1’
colour(PrintColour::COLOUR_1); // Fine!
}
Ce code exactement comme il est compile, et fonctionne sans problème. Si je le décommenter colour();
, cependant, g ++ déclenche l'erreur:
auto_param.cpp: In function ‘int main()’:
auto_param.cpp:27:10: error: no matching function for call to ‘colour()’
colour();
^
auto_param.cpp:13:6: note: candidate: template<class auto:1> void colour(auto:1)
void colour(auto c = PrintColour::COLOUR_1)
^~~~~~
auto_param.cpp:13:6: note: template argument deduction/substitution failed:
auto_param.cpp:27:10: note: couldn't deduce template parameter ‘auto:1’
colour();
^
Il est possible que je manque juste un point stupide ou il est possible que je suis vraiment stupide et mal compris la chose.
Dois-je être en mesure de déclarer un paramètre de fonction comme auto
tout en étant capable de lui donner une valeur par défaut en C++ 11 ou C++ 14? Je pensais que la valeur par défaut donnée serait suffisante pour permettre au compilateur de déduire le type de paramètre ...
Merci d'avance.
EDIT 1:
Il pense que je dois faire ma question plus claire afin de ne pas être confondu par Is there a way to pass auto as an argument in C++?
Le point ne passe pas ici auto
à une fonction mais ayant auto
en conjonction avec une valeur par défaut pour l'argument, quelque chose de non pris en compte dans la question susmentionnée.
EDIT 2:
Comme précisé dans les commentaires ici, C++ 11 ne dispose pas d'une telle caractéristique de passage auto
comme paramètre, mais 14 C++ et (g ++ 6.3.1 par défaut « gnu ++ 14 ") semble. Ma question originale n'est pas liée à C++ 11, cependant, et ma question n'est pas si C++ 11 soutient les paramètres auto
. Je comptais sur auto
comme paramètre mais j'ai oublié de vérifier la version standard minimum pour cela. Mes excuses et je l'ai réparé maintenant.
g++ -std=c++11 auto_param.cpp -o auto_param
auto_param.cpp:13:14: error: use of ‘auto’ in parameter declaration only available with -std=c++14 or -std=gnu++14
j'espère qu'il soit clair que la différence entre ma question et Is auto as a parameter in a regular function a GCC 4.9 extension?. S'il vous plaît dites-moi si non.
double possible de [Y at-il un moyen de passer automatique comme un argument en C++?] (http://stackoverflow.com/questions/29944985/is-there-a-way-to- pass-auto-as-an-argument-in-c) –
* En supposant que * 'auto' est juste un sucre syntaxique pour le paramètre template, vous ne pouvez pas appeler cette fonction sans arguments, car son type de paramètre ne peut pas être déduit dans ce le contexte. –
Possibilité de duplication de [Est auto comme paramètre dans une fonction régulière une extension GCC 4.9?] (Http://stackoverflow.com/questions/25879705/is-auto-as-a-parameter-in-a-regular-function -a-gcc-4-9-extension) – cpplearner