2017-07-14 2 views
2

je fais fonction qui convertit ints ou flotte à la chaîne:si constexpr et erreur de syntaxe « type »

#include <functional> 
#include <string> 
#include <iostream> 

template <typename From> 
inline std::string ToStr(const From& src) 
{ 
    constexpr bool isIntegral = std::is_integral<From>::value; 
    constexpr bool isFloat = std::is_floating_point<From>::value; 

    if constexpr (isIntegral) 
     return (std::_Integral_to_string<char>(src)); 
    else if (isFloat) 
     return (std::_Floating_to_string("%f", src)); 
} 

int main() 
{ 
    std::cout << ToStr(123); 
} 

J'utilise Visual Studio 2017 et je reçois des erreurs suivantes:
- erreur de syntaxe ' tapez 'sur la ligne 11 (premier si)
- illégale sinon sans correspondance si sur la ligne 13 (deuxième si)

Je ne sais pas comment y remédier, des idées?

+2

Il n'y a pas de 'type' sur la 4ème ligne. Présentez votre [MCVE]. –

+0

Hautement lié: https://stackoverflow.com/questions/5246049/c11-static-assert-and-template-instantiation – Rakete1111

+0

@ LightnessRacesinOrbit mais c'est exactement le même code qui donne exactement ces erreurs. J'étais confus parce que, comme vous l'avez écrit, il n'y a pas de 'type' sur cette ligne. – Condzi

Répondre

4

Vous utilisez la version 15.2.

Microsoft a déclaré dans a blog post que if constexpr est pris en charge dans 15.3 (Aperçu 2). Par conséquent, essayez de mettre à niveau Visual Studio.

Il est très difficile pour Microsoft de gérer clairement différentes versions de son logiciel, car il souhaite que tout le monde "mette à jour" tout le temps. Malheureusement, ce n'est pas particulièrement pratique dans des cas comme celui-ci, quand vous avez besoin de savoir ce qui est dans quoi.