2016-01-04 1 views
5

Dans C de 14 quelque chose comme cela a été légalisé (pour lambdas): -automatique comme argument de la fonction

auto l = [](auto x, auto y) { return x+y; }; 

Cependant quelque chose comme ceci est toujours pas légale: -

auto sum (auto x, auto y) 
{ 
    return x+y; 
} 

Ma curiosité C'est pourquoi le second n'a pas été ajouté à la norme (bien qu'il soit censé être ajouté en C++ 17, je l'espère)? Quels étaient les avantages & contre le second?

+0

modèle beaucoup !? – StoryTeller

Répondre

6

Il n'a pas été ajouté car c'est une autre chose à ajouter et le temps n'est pas infini. Nous ne pouvons pas nous attendre à ce que toutes les améliorations utiles soient ajoutées en une seule fois, n'est-ce pas? Comme vous l'avez identifié, ce sera en C++ 17.

+0

Temps * est * fini. – YSC

+0

Maintenant, je suis confus. Le temps est infini ou le temps est fini ou le temps est-il à la fois? Paging [physics.stackexchange] (http://physics.stackexchange.com/) – AndyG

+1

Pour rendre tout le monde heureux, nous dirons que l'heure est 'O (infini)'. – erip

3

Cela fait partie d'un TS qui n'était pas prêt à temps pour C++ 14.

Il va être équivalent à

template <typename T, typename U> 
auto sum(T x, U y) { return x+y } 

Le seul pro est qu'il est légèrement plus courte. Tout le reste est identique.

+0

Y compris les ramifications ODR? Définition dans chaque TU etc? (Doit être, je suppose - ce qui me fait penser que cette nouvelle fonctionnalité est juste un gros tas de confusion qui attend de se produire) –

+0

@ LightnessRacesinOrbit Je ne pense pas que cela sera déroutant si on est habitué aux templates –

+0

@AnkitAcharya: Peut-être mais le fonctionnalité est littéralement "faire un modèle ressemble à un non-modèle". Cela ne me semble pas une idée brillante. –