Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Langage
Langage Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 21h58   #21
Flob90
Modérateur
 
Avatar de Flob90
 
Homme Florian Blanchet
Etudiant en Optique
Inscription : août 2004
Messages : 1 112
Détails du profil
Informations personnelles :
Nom : Homme Florian Blanchet
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Etudiant en Optique

Informations forums :
Inscription : août 2004
Messages : 1 112
Points : 2 569
Points : 2 569
J'ai édité mon message précédent,il semblerait que le POI peut avoir un impact sur le lookup, et j'ai l'impression qu'on est dans ce cas, cf mon message pour les détails.

Source : Norme + Vandevoorde

@Arzar: Visual fait déjà une erreur sur l'exemple de la norme cité par Loic, donc sans même parlé de Variadic il est un peu à la ramasse sur les règles de lookup.
__________________
"We can solve any problem by introducing an extra level of indirection" Butler Lampson

"N'importe quel problème peut être résolu en introduisant un niveau d'indirection supplémentaire" Butler Lampson (traduction libre)
Flob90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 22h59   #22
JolyLoic
Rédacteur/Modérateur
 
Avatar de JolyLoic
 
Homme Loïc Joly
Développeur informatique
Inscription : août 2004
Messages : 4 698
Détails du profil
Informations personnelles :
Nom : Homme Loïc Joly
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2004
Messages : 4 698
Points : 9 964
Points : 9 964
Citation:
Envoyé par Flob90 Voir le message
Je viens de regarder de plus près, j'ai quelques pistes, mais rien de bien certains.

Premièrement le passage que cite Loic n'est pas vraiment applicable dans ce cas, ce passage fait référence au noms non-dépendant, or f(arg...) est une expression qui dépend des paramètres template.
Je suis d'accord sur ce point, j'ai été trop rapide. Mais ma conclusion reste identique.

Citation:
Envoyé par Flob90 Voir le message
Dans ce cas le lookup est faite au moment de l'instanciation depuis, à la fois, la définition et le POI.
Ce n'est pas vraiment ça. Il y a deux types de sources de recherches :
- La recherche de base, qui a lieu au moment de la définition, pas de l'instanciation,
- La recherche dépendante des arguments, qui elle a lieu dans les namespaces associés aux arguments de la fonction tels qu'ils sont connus au point d'instanciation de la fonction.

Dans notre cas :
- La recherche de base ne trouvera pas la fonction définie après.
- La recherche dépendante du nom ne trouvera rien, car int n'a pas de namespace associé, et string a std comme namespace associé, mais std ne contient pas de fonction f.

Je pense que si à la place de std::string, tu utilisais un type défini dans le même namespace que tes différentes fonctions f, tu aurais donc un résultat différent, puisque là la recherche dépendante du nom pourrait trouver ces fonctions.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
JolyLoic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 23h43   #23
germinolegrand
Rédacteur/Modérateur
 
Avatar de germinolegrand
 
Homme Germino Legrand
Développeur de jeux vidéo
Inscription : octobre 2010
Messages : 390
Détails du profil
Informations personnelles :
Nom : Homme Germino Legrand
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur de jeux vidéo
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : octobre 2010
Messages : 390
Points : 2 351
Points : 2 351
(P.S: SFINAE != Single Failure Is Not An Error mais Substitution Failure Is Not An Error)
__________________
Choisis un travail que tu aimes et tu n'auras pas à travailler un seul jour de ta vie.
germinolegrand est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2012, 03h16   #24
Flob90
Modérateur
 
Avatar de Flob90
 
Homme Florian Blanchet
Etudiant en Optique
Inscription : août 2004
Messages : 1 112
Détails du profil
Informations personnelles :
Nom : Homme Florian Blanchet
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Etudiant en Optique

Informations forums :
Inscription : août 2004
Messages : 1 112
Points : 2 569
Points : 2 569
@Loic: Je pense qu'au final on se rejoint sur la conclusion, j'ai assimilé les deux lieux de recherche car ma source a été la norme et elle le fait :
Citation:
Declarations from namespaces associated with the types of the function arguments both from the
instantiation context (14.6.4.1) and from the definition context.
Mais oui l'une est dépendante de l'ADL et pas l'autre, je le précise dans la suite de mon message et suis en total accord avec toi :
Citation:
Un dernier point est que le lookup effectué depuis le POI est ADL [...] depuis la définition (lookup non ADL).
Mais ton message est surement plus clair que le mien sur ce point .

@All: C'est inutile de parler de SFINAE, il n'intervient pas vraiment dans cette situation. Ce qu'on nomme SFINAE n'entre en jeu qu'en présence d'appel explicite à une spécialisation (*), ce n'est pas notre cas. Dans ce cas les paramètre template sont déduits des paramètres de la fonction, il n'y a donc pas d'erreur de substitution (**).

(*) Sauf pour le premier appel du premier exemple du premier message, mais ce n'est pas lui qui pose problème.

(**) On peut peut-être trouver des cas tordues où il rentre en jeu sans appel explicite à une spécialisation, mais là c'est pas le cas.
__________________
"We can solve any problem by introducing an extra level of indirection" Butler Lampson

"N'importe quel problème peut être résolu en introduisant un niveau d'indirection supplémentaire" Butler Lampson (traduction libre)
Flob90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h40.


 
 
 
 
Partenaires

Hébergement Web