Questions marquées «language-lawyer»

Pour des questions sur les subtilités des spécifications formelles ou faisant autorité des langages de programmation et des environnements.


4
Changement de rupture en C ++ 20 ou régression dans clang-trunk / gcc-trunk lors de la surcharge de comparaison d'égalité avec une valeur de retour non booléenne?
Le code suivant compile correctement avec clang-trunk en mode c ++ 17 mais se casse en mode c ++ 2a (c ++ 20 à venir): // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} …


1
Pourquoi le compilateur choisit-il cette méthode générique avec un paramètre de type de classe lorsqu'il est appelé avec un type d'interface sans rapport?
Considérez les deux classes et l'interface suivantes: public class Class1 {} public class Class2 {} public interface Interface1 {} Pourquoi le deuxième appel à mandatoryappeler la méthode surchargée avec Class2, si getInterface1et Interface1n'a aucune relation avec Class2? public class Test { public static void main(String[] args) { Class1 class1 = …

2
T doit-il être un type complet pour être utilisé dans `std :: declval <T>`?
Considérez cet exemple (venant d' ici ): #include &lt;type_traits&gt; #include &lt;iostream&gt; template &lt;typename U&gt; struct A { }; struct B { template &lt;typename F = int&gt; A&lt;F&gt; f() { return A&lt;F&gt;{}; } using default_return_type = decltype(std::declval&lt;B&gt;().f()); }; int main() { B::default_return_type x{}; std::cout &lt;&lt; std::is_same&lt; B::default_return_type, A&lt;int&gt;&gt;::value; } Il compile …

2
Déduction des types d'arguments du modèle de modèle C ++
J'ai du code qui trouve et imprime les correspondances d'un modèle en passant par le conteneur de chaînes. L'impression est effectuée dans la fonction foo qui est modélisée Le code #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;tuple&gt; #include &lt;utility&gt; template&lt;typename Iterator, template&lt;typename&gt; class Container&gt; void …

1
Une valeur char définie sur CHAR_MAX est-elle garantie de se terminer par CHAR_MIN?
Mon code: #include &lt;stdio.h&gt; #include &lt;limits.h&gt; int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Production: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Nous voyons que lorsque nous incrémentons un charensemble de variables à CHAR_MAX, il s'enroule autour de CHAR_MIN. Ce comportement est-il …

3
Troncature incohérente des expressions entières de champ de bits non signées entre C ++ et C dans différents compilateurs
Modifier 2 : Je déboguais un échec de test étrange lorsqu'une fonction résidant précédemment dans un fichier source C ++ mais déplacée dans un fichier C textuellement, a commencé à renvoyer des résultats incorrects. Le MVE ci-dessous permet de reproduire le problème avec GCC. Cependant, quand j'ai, sur un coup …

1
InvalidOperationException inattendue lors de la tentative de modification de la relation via la valeur par défaut de la propriété
Dans l'exemple de code ci-dessous, j'obtiens l'exception suivante lors de l'exécution db.Entry(a).Collection(x =&gt; x.S).IsModified = true: System.InvalidOperationException: 'L'instance de type d'entité' B 'ne peut pas être suivie car une autre instance avec la valeur de clé' {Id: 0} 'est déjà en cours de suivi. Lorsque vous attachez des entités existantes, …



2
Construire des exceptions standard avec un argument de pointeur nul et des post-conditions impossibles
Considérez le programme suivant: #include&lt;stdexcept&gt; #include&lt;iostream&gt; int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&amp;) { std::cout &lt;&lt; "Caught!\n"; } } GCC et Clang avec libstdc ++ appellent std::terminateet abandonnent le programme avec le message terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Clang …

1
Création d'objet implicite non spécifié
Depuis P0593 La création implicite d'objets pour la manipulation d'objets de bas niveau a été acceptée, les objets peuvent maintenant être créés implicitement en C ++ 20. Plus précisément, le libellé introduit par la proposition permet à certaines opérations (telles que std::malloc) de créer et de démarrer automatiquement la durée …



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.