Dado: #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...
Dado: #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...
En C ++ 20, el concepto de POD está en desuso, supuestamente porque es un rasgo compuesto sin sentido de ser trivial y de diseño estándar. Sin embargo, la definición de POD en el borrador de C ++ 20 no es exactamente "diseño trivial y estándar"; en realidad es: Una clase POD es una clase que es...
Digamos que tengo un shared_ptrcon un asignador personalizado y un eliminador personalizado. No puedo encontrar nada en el estándar que habla sobre dónde se debe almacenar el eliminador: no dice que el asignador personalizado se usará para la memoria del eliminador, y no dice que no lo...
Descubrí que los resultados son diferentes entre los compiladores si uso un lambda para capturar una referencia a una variable global con una palabra clave mutable y luego modifico el valor en la función lambda. #include <stdio.h> #include <functional> int n =
[basic.scope.pdecl] / 1 del borrador estándar de C ++ 20 tenía el siguiente ejemplo (no normativo) en una nota (cita parcial anterior a la fusión de la solicitud de extracción 3580 , consulte la respuesta a esta pregunta): unsigned char x = x; [...] x se inicializa con su propio valor...
Considerar int main() { auto a = new int[0]; delete[] a; // So there's no memory leak } Entre la inicialización y la eliminación de la copia, ¿puede leer el puntero en a + 1? Por otra parte, el lenguaje no permite que el compilador conjunto ade
#include <optional> bool f() { std::optional<int> opt; return opt; } No compila: 'return': cannot convert from 'std::optional<int>' to 'bool' Consulta de referencia Pensé encontrar una explicación, pero la leí, ya que debería estar bien. Las conversiones implícitas se...
Considera este código: #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...
Cppreference tiene este código de ejemplo para 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; }); Pero también dice: std::transformno garantiza la aplicación en orden...
¿Se thisgarantiza que el valor del puntero sea constante durante la vida útil de un objeto en particular? No puedo imaginar un caso en el que cambiaría, pero no sé si no me estoy perdiendo
JLS : El operador de precedencia más baja es la flecha de una expresión lambda (->) , seguida de los operadores de asignación. ¿Seguido en qué dirección (prioridad creciente, prioridad decreciente)? - "seguido" significa que la asignación tiene mayor o menor prioridad (con respecto al...
Dada la siguiente plantilla de clase: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Definimos Innerpor separado para cada especialización de Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner...
Considera este código: void foo() { goto bar; int x = 0; bar: ; } GCC y Clang lo rechazan porque el salto a bar:omite la inicialización variable. MSVC no se queja en absoluto (excepto que usar xdespués bar:causa una advertencia). Podemos hacer algo similar con un switch: void foo() { switch...
C ++ usa el streamofftipo para representar un desplazamiento dentro de una secuencia (archivo) y se define de la siguiente manera en [stream.types]: using streamoff = implementation-defined ; El tipo streamoff es sinónimo de uno de los tipos integrales básicos firmados de tamaño suficiente...
Recientemente apareció en una revisión de código que en el siguiente ejemplo: enum class A : uint8_t { VAL1, VAL2 }; ... std::vector<A> vOfA; // Assume this is sized and full of some stuff. std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A)); Deberíamos estar usando en...
¿Se requiere que un programa finalice? En otras palabras, ¿es un programa que se ejecuta para siempre técnicamente Comportamiento indefinido? Tenga en cuenta que esto no se trata de bucles vacíos. Hablar sobre programas que hacen "cosas" (es decir, comportamiento observable) para siempre. Por...
std::basic_iostiene un constructor público : explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb); En mi opinión, la única razón para que una clase tenga un constructor público es usar una instancia independiente de esa clase en un programa. Si una clase existe solo para que otras...
Como ejercicio, estoy escribiendo un analizador para Haskell desde cero. Al hacer el lexer, noté las siguientes reglas en el Informe Haskell 2010 : dígito → ascDigit | uniDigit ascDigit → 0| 1El | ... | 9 uniDigit → cualquier dígito decimal Unicode octit → 0| 1El | ... | 7 hexit → dígito |...
Compilo este programa por g ++ y clang ++. Hay una diferencia: g ++ imprime 1, pero clang ++ imprime 2. Parece que g ++: la variable externa se define en el ámbito más corto. clang ++: la variable externa se define en el ámbito global más corto. ¿La especificación C ++ tiene alguna...
¿Es esto válido C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC y MSVC piensan que está bien, Clang cree que no: Compiler Explorer . Todos los compiladores están de acuerdo en que este está bien: Compiler Explorer . int main() { constexpr auto p = __func__;...