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.


3
Concepts C ++ 20: Quelle spécialisation de modèle est choisie lorsque l'argument de modèle se qualifie pour plusieurs concepts?
Donné : #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> …

3
Différence de comportement de la capture mutable de la fonction lambda d'une référence à une variable globale
J'ai trouvé que les résultats sont différents d'un compilateur à l'autre si j'utilise un lambda pour capturer une référence à une variable globale avec un mot clé mutable, puis modifie la valeur dans la fonction lambda. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() { int &m = …





4
Conversion implicite non autorisée au retour
#include <optional> bool f() { std::optional<int> opt; return opt; } Ne compile pas: 'return': cannot convert from 'std::optional<int>' to 'bool' Consultation de référence J'aurais pensé trouver une explication, mais je l'ai lu comme il se doit. Des conversions implicites sont effectuées chaque fois qu'une expression d'un certain type T1 est …

1
Pourquoi {} comme argument de fonction ne conduit-il pas à l'ambiguïté?
Considérez ce code: #include <vector> #include <iostream> enum class A { X, Y }; struct Test { Test(const std::vector<double>&, const std::vector<int>& = {}, A = A::X) { std::cout << "vector overload" << std::endl; } Test(const std::vector<double>&, int, A = A::X) { std::cout << "int overload" << std::endl; } }; int …

4
Est-il valide d'utiliser std :: transform avec std :: back_inserter?
Cppreference a cet exemple de code pour std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Mais cela dit aussi: std::transformne garantit pas l'application dans l'ordre de unary_opou binary_op. Pour appliquer une fonction à une séquence dans l'ordre ou pour appliquer une fonction qui …


2
Flèche (->) la priorité / priorité de l'opérateur est la plus faible, ou la priorité de l'affectation / affectation combinée est la plus faible?
JLS : L' opérateur de priorité la plus faible est la flèche d'une expression lambda (->) , suivie des opérateurs d'affectation. Suivi dans quelle direction (priorité croissante, priorité décroissante)? - «suivi» signifie que l'affectation a une priorité plus élevée ou une priorité plus faible (par rapport à l'opérateur de la …



1
Clang a-t-il raison de rejeter le code dans lequel la classe imbriquée d'un modèle de classe est définie uniquement via des spécialisations?
Étant donné le modèle de classe suivant: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; nous définissons Innerséparément pour chaque spécialisation Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; puis définissez la fonction membre fune fois pour toutes les spécialisations de Outer: auto Outer<T>::f(Inner) -> …

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.