Tag: LANGUAGE-LAWYER
El estándar C11 define el tipo _Bool (6.2.5.2) como un tipo entero sin signo estándar (6.2.5.6) y, según leo el estándar, _Bool también es un tipo aritmético (6.2.5.18 a través de 6.2.5.7 y 6.2.5.17). Además, se especifica que para + y -, “ambos operandos deben tener tipo aritmético, o un . . . Read more
Cada vez que un valor prvalue aparece como operando de un operador que espera un glvalue para ese operando, se aplica la conversión de materialización temporal para convertir la expresión a un xvalue. Fuente: https://eel.is/c++draft/basic.lval#7 ¿Por qué 5 = 6 es inválido? ¿No debería realizar una conversión de materialización temporal . . . Read more
Como sabes, podemos proporcionar UnaryOperation y BinaryOperation para muchas funciones de STL. Los argumentos de estos métodos pueden ser definidos por valor, pero en muchos casos, los pasamos por referencia de la siguiente manera: Ret fun(const Type &a); // UnaryOperation Ret fun(const Type1 &a, const Type2 &b); // BinaryOperation Ahora . . . Read more
Considere que el Anexo F no es compatible y que una implementación no sigue el IEEE 754. Entonces, ¿cuáles son los requisitos de C11 para elevar excepciones de punto flotante para estos operadores? Operadores de igualdad: == != Operadores relacionales: > >= < <= No puedo encontrar tales requisitos, ¿significa . . . Read more
El siguiente programa: #include <type_traits> template<typename t,=”” bool=”” b=””> struct S{ S() = default; template<bool sfinae=”true,” typename=””></bool><sfinae &&=””></sfinae><t>::value>> operator S<t const,=”” b=””>() { return S<t const,=”” b=””>{}; } }; template<typename t,=”” bool=”” b1,=”” bool=”” b2=””> void f(S<const></const><t>, b1>, S<t, b2=””>) {} int main() { S<int, true=””> s1{}; S<int, false=””> s2{}; . . . Read more