Tag: LANGUAGE-LAWYER
Tengo este fragmento de código y me pregunto si es válido o puede causar un comportamiento indefinido: #include <list> #include <utility> void myFunction(std::list<><int, int=””>> foo) { while (foo.size()) { std::pair<int, int=””> const &bar = foo.front(); //trabajar con bar foo.pop_front(); } } Estoy usando una referencia para evitar duplicar el parámetro . . . Read more
Tengo este código funcionando: template <typename x,=”” typename=”” y=””> auto f(X a, Y b) { return a + b; }; template <typename x,=”” typename=”” y=””> auto f(X* a, Y* b) { return *a + *b; }; int main() { int* p; int* q; f(p, q); } que se compila y . . . Read more
La siguiente función (en mi intención) toma un rvalue y lo presenta como si fuera un lvalue. auto constexpr RtoL = [](auto&& r) -> decltype(auto) { static_assert(std::is_rvalue_reference_v<decltype(r)>, “Gimme rvalues, not lvalues.”); return (r); }; Pienso en usarlo en situaciones en las que puedo garantizar que un xvalue no ha sido . . . Read more
Considere el siguiente programa de ejemplo: #include <stdio.h> static int n = 123; extern int n; int main(void){ printf(“n is %d\n”,n); return 0; } Se compila correctamente con gcc -std=c99 -pedantic myprog.c. La variable n tiene un enlace estático según C99 § 6.2.2 Linkages of identifiers, parte 4: Para un . . . Read more
En el siguiente código, se comparan los punteros a las variables static constexpr x e y para saber si son diferentes: int main() { static constexpr int x = 1; static constexpr int y = 2; static_assert( &x != &y ); } Funciona bien en Clang, pero no en GCC . . . Read more