Articles of c ++ 14

¿Qué encabezados en la biblioteca estándar de C ++ tienen garantizado incluir otro encabezado?

Los encabezados de biblioteca estándar de C ++ pueden incluirse entre sí de formas no especificadas, por lo que los progtwigdores generalmente no deberían depender de un encabezado que incluya otro. Sin embargo, en algunos casos, se garantiza que un encabezado incluya otro encabezado, o ponga a disposición ciertas funciones que de otro modo requerirían […]

Resolución de sobrecarga entre objeto, referencia de valor real, referencia de referencia

Dadas las tres funciones, esta llamada es ambigua. int f( int ); int f( int && ); int f( int const & ); int q = f( 3 ); La eliminación de f( int ) hace que tanto Clang como GCC prefieran la referencia rvalue sobre la referencia lvalue. Pero en su lugar, eliminar cualquiera […]

Es #pragma una vez parte del estándar C ++ 11?

Tradicionalmente, la forma estándar y portátil de evitar múltiples inclusiones de encabezado en C ++ era / es utilizar el esquema de directivas #ifndef – #define – #endif también denominado esquema de #ifndef – #define – #endif (vea el fragmento de código a continuación). #ifndef MY_HEADER_HPP #define MY_HEADER_HPP … #endif Sin embargo, en la mayoría […]

Se eliminó el constructor predeterminado. Los objetos aún se pueden crear … a veces

La vista ingenua, optimista y oh … tan incorrecta de la syntax de inicialización uniforme de c ++ 11 Pensé que dado que los objetos de tipo C ++ 11 definidos por el usuario deberían construirse con la nueva syntax {…} lugar de la antigua (…) syntax (excepto para el constructor sobrecargado para std::initializer_list y […]

¿Hay un nombre para este modismo de creación de tuplas?

En la lista de correo de Boost , @LouisDionne publicó recientemente el siguiente truco inteligente para crear una entidad similar a una tupla: #include auto list = [](auto …xs) { return [=](auto access) { return access(xs…); }; }; auto length = [](auto xs) { return xs([](auto …z) { return sizeof…(z); }); }; int main() { […]

Comprender el ejemplo en la conversión lvalue-a-rvalue

Me cuesta entender cómo este código (un ejemplo del borrador del estándar C ++ 14 [conv.lval] ) invoca un comportamiento indefinido para g(false) . ¿Por qué constexpr hace que el progtwig sea válido? Además, ¿qué significa “no accede a yn “? En ambas llamadas a g() estamos devolviendo el miembro n datos, entonces ¿por qué […]

Llamar al constructor initializer_list a través de make_unique / make_shared

Estoy intentando usar std::make_unique para instanciar una clase cuyo constructor recibirá una std::initializer_list . Aquí un caso mínimo: #include #include #include #include struct Foo { Foo(std::initializer_list strings) : strings(strings) {} std::vector strings; }; int main(int, char**) { auto ptr = std::make_unique({“Hello”, “World”}); return 0; } Puedes ver en Coliru que no se comstack : main.cpp:14:56: […]

Autoinicialización de una variable de constexto estática, ¿está bien formada?

Dada la siguiente statement en el espacio de nombres global: constexpr int x = x; ¿Está bien formado? El borrador de la sección estándar de C ++ 14 3.6.2 [basic.start.init] dice: Las variables con duración de almacenamiento estático (3.7.1) o duración de almacenamiento de subprocesos (3.7.2) se inicializarán en cero (8.5) antes de que tenga […]

¿Cómo crear una función std :: a partir de una expresión lambda que captura movimiento?

Estoy intentando crear una std::function partir de una expresión lambda que captura movimiento. Tenga en cuenta que puedo crear una expresión lambda de captura de movimiento sin problemas; es solo cuando bash envolverlo en una std::function que me sale un error. Por ejemplo: auto pi = std::make_unique(0); // no problems here! auto foo = [q […]

¿Sigue siendo un puntero con la dirección y el tipo correctos un puntero válido desde C ++ 17?

(En referencia a esta pregunta y respuesta .) Antes del estándar C ++ 17, la siguiente oración se incluyó en [basic.compound] / 3 : Si un objeto de tipo T está ubicado en una dirección A, se dice que un puntero de tipo cv T * cuyo valor es la dirección A apunta a ese […]