3 votes

La construction par défaut de SFINAE d'arguments variables fonctionne dans clang, mais échoue dans Visual Studio 2015

Quelqu'un sait si ce code est mauvais ou si VS a un bug ou si Clang est permissif?

Je pense que mon constructeur ne devrait pas accepter de paramètres et passer la vérification enable_if - mais quelque part, VS dit "non".

Visual Studio 2015 Update 2 donne l'erreur suivante:

source_file.cpp(##): error C2512: 'Foo::Foo': aucun constructeur par défaut approprié disponible

Clang en direct: http://rextester.com/VWAI2954

VS en direct avec erreur: http://rextester.com/PTDSS2853

#include 
#include 
using namespace std;

template  struct static_all_of;

// Si le premier paramètre est vrai, regardez le reste de la liste
template 
struct static_all_of : static_all_of {};

// si l'un quelconque des paramètres est faux, retourne faux
template 
struct static_all_of : std::false_type {};

// S'il ne reste plus de paramètres, aucun faux n'a été trouvée, donc retourne vrai
template <> struct static_all_of<> : std::true_type {};

struct Bar{};

struct Foo {

 template >::value...>::value, int> = 0>
   Foo(Things... stuff){}
};

int main()
{
    Foo f;  
}

0voto

xaxxon Points 5389

Comme l'a dit deviantfan - Microsoft n'a en fait jamais affirmé que Visual Studio 2015 avait un support SFINAE correct, donc il ne semble pas s'agir d'un bug spécifique, mais de VS2015 qui n'est pas conforme au C++11.

https://msdn.microsoft.com/fr-fr/library/hh567368.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X