IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Erreur conversion std::unique_ptr sur class template dérivé.


Sujet :

Visual C++

  1. #1
    Membre confirmé Avatar de Andarus
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 137
    Points : 455
    Points
    455
    Par défaut Erreur conversion std::unique_ptr sur class template dérivé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include "gtest/gtest.h"
    #include <iostream>
    #include <memory>
     
    template<typename T>
    class A
    {
    public:
    	virtual float a() = 0;
    };
     
    class B : public A<float>
    {
    public:
    	float a()
    	{
    		return 3.0f;
    	};
    };
     
    std::unique_ptr<A<float>> use()
    {
    	std::unique_ptr<B> res = std::make_unique<B>();
     
    	return res;
    }
     
     
    TEST(scratch, first)
    {
    	auto c = use();
     
    	EXPECT_FLOAT_EQ((*c).a(), 3.0f);
    }
    L'analyseur syntaxique sort cette erreur au niveaux du return de la fonction use :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    no suitable user-defined conversion from "std::unique_ptr<B, std::default_delete<B>>" to "std::unique_ptr<A<float>, std::default_delete<A<float>>>" exists
    Pourtant la compilation se déroule sans problème. Je compile sous vs2015 update3.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 200
    Points : 12 354
    Points
    12 354

  3. #3
    Membre confirmé Avatar de Andarus
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 137
    Points : 455
    Points
    455
    Par défaut
    Je sais que ça marche car l'objet retourné est déplacé et non copier par défaut.
    Je trouve juste bizarre que l'analyseur syntaxique sorte une erreur qui n'a pas lieux d'être.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 200
    Points : 12 354
    Points
    12 354
    Par défaut
    Relisez bien les messages.
    L'utilisation d'une variable locale n'est pas neutre.

  5. #5
    Membre confirmé Avatar de Andarus
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 137
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Relisez bien les messages.
    L'utilisation d'une variable locale n'est pas neutre.
    Du coup mon code compile, s’exécute correctement mais n'est pas du C++ correct? Pourtant le compilateur semble faire un "implicit move".

    Au pire avoir une erreur de l'analyseur syntaxique n'est pas si embêtant, ça ne m’empêche pas de travaillé , je voulais surtout savoir si mon code respectait le standard.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 200
    Points : 12 354
    Points
    12 354
    Par défaut
    s’exécute correctement
    Ça, faut encore le prouvé, pour tous les cas possible de configuration de compilation et d'exécution.
    Ne basez pas votre code sur des optimisations qui ne sont pas obligatoire/standardisé, vous serez en plein Undefined Behavior.

Discussions similaires

  1. Réponses: 52
    Dernier message: 23/10/2014, 12h22
  2. std::bind sur une fonction d'une classe de base template
    Par Iradrille dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2013, 18h03
  3. Pointeur sur classe template
    Par SmOkEiSBaD dans le forum Langage
    Réponses: 6
    Dernier message: 23/04/2011, 13h29
  4. [Template] Pointeur sur classe template
    Par Kromagg dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2008, 17h01
  5. Classe template - erreur compilation
    Par Rodrigue dans le forum Langage
    Réponses: 5
    Dernier message: 06/07/2006, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo