typetraits

¿Cómo funciona` es base de'?

¿Cómo funciona el siguiente código? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typena ... a: Es una versión reducida (se eliminan las macros) de boost::is_base_of. Y esto funciona en una amplia gama de compiladores.

¿Cuál es la diferencia entre un rasgo y una política?

Tengo una clase cuyo comportamiento estoy tratando de configurar. template<int ModeT, bool IsAsync, bool IsReentrant> ... lantilla realmente una política en lugar de un rasgo? ¿Cuándo es un argumento de plantilla un rasgo frente a una política?

¿Por qué no hay un rasgo de tipo std::is struct?

He visto que para comprobar si un tipo T es una clase puedo usar: bool isClass = std::is_class<T>::value; Devuelve t ... inción entre ellos en el rasgo de tipo. ¿Es siempre inútil comprobar esta diferencia, o hay alguna razón más que no entiendo?

¿Por qué std:: is pod está obsoleto en C++20?

std::is_pod será probablemente obsoleto en C++20. ¿Cuál es la razón de esta elección? ¿Qué debo usar en lugar de std::is_pod para saber si un tipo es realmente un POD?

Con C++17 es posible detectar si una estructura/clase tiene alguna base?

Necesito un rasgo de tipo que será verdadero si el tipo dado deriva de cualquier cosa, y falso de lo contrario. Por ejemplo: ... ompió mi solución. Si de alguna manera puedo detectar si un tipo T tiene alguna clase base, mi solución funcionará de nuevo.

¿Qué es decltype con dos argumentos?

Editar, para evitar confusiones: decltypeno acepta dos argumentos. Ver respuestas. Las siguientes dos estructuras se pu ... iona diferente de lo que pensaba. No pude encontrar ninguna documentación; solo se explica con una expresión en todas partes.

¿Cuándo es un lambda trivial?

¿Cuándo se garantiza que un lambda a sea trivial, si es que lo es? Asumí que si captura solo tipos triviales o nada, sería ... r gcc > = 5 alrededor. Espero que esto sea una regresión en vs140, pero no estoy seguro del comportamiento correcto aquí.

¿Qué hacen los compiladores con la ramificación en tiempo de compilación?

EDIT: Tomé el caso "if/else" como un ejemplo que a veces se puede resolver en tiempo de compilación (por ejemplo, cuando los ... es mejor que el otro? ¿Hay otras (posiblemente mejores) soluciones para lidiar con la ramificación en tiempo de compilación?

Uso de rasgos de tipo C++11 para proporcionar implementaciones alternativas en línea

¿Es razonable el siguiente patrón de código cuando se usan rasgos en código templado donde ambas implementaciones alternativ ... caso complejo). Si esta no es la forma correcta de hacerlo, ¿puede alguien por favor iluminarme con la sintaxis recomendada?

Comprobación de que existe un miembro, posiblemente en una clase base, versión C++11

En https://stackoverflow.com/a/1967183/134841 , se proporciona una solución para verificar estáticamente si existe un miembr ... una implementación de esta metafunción que ambos encuentren reserved() en clases base de T y todavía funciona si T es final?

Detectar la existencia de un miembro privado

Quiero escribir un rasgo de tipo para comprobar si algún tipo tiene un miembro member. Si member fuera público, hay muchas ma ... mber<D>{}, "!"); // error ¿Hay alguna forma de escribir un comprobador de miembros en todos los controles de acceso?

Escriba trait para comprobar que todos los tipos de un paquete de parámetros son construibles mediante copia

Necesito un rasgo de tipo para comprobar si todos los tipos de un paquete de parámetros son construibles por copia. Esto es l ... parámetros en la lista de plantillas no funciona. No tengo idea. ¿Alguien tiene un buen consejo, ¿cómo resolver el problema?

Cómo detectar si un método es virtual?

Traté de hacer un rasgos para encontrar si un método es virtual: (https://ideone.com/9pfaCZ ) // Seveval structs which shou ... ero check no se descarta para el tipo "malo" en SFINAE :( . ¿Cuál es la forma correcta de detectar si un método es virtual?

¿Por qué std::is assignable devuelve false con tipos de puntero relacionados?

Dadas dos clases muy simples: class X { }; class Y : public X { }; ¿Por qué es eso, con Clang y GCC apuntando a C++14, std::is_assignable<X*, Y*>::value es false? Es true con Clang en mi configuración cuando me dirijo a C++11.

C++11 es el mismo rasgo de tipo para las plantillas

¿Es posible comprobar que el tipo T es un std::array de tipo y tamaño arbitrario? Puedo comprobar una matriz en particular, ... sto, no compila): is_same<T, std::array>::value ¿Hay alguna manera de lograr esto (tal vez no usando is_same)?

Qué tipo de "Rasgos" se utilizan / definen en el estándar C++0x

Un rasgo en C++ encapsula una familia de operaciones que permiten que un Algoritmo o Estructura de Datos opere con ese tipo c ... similares a trait que son nuevas en C++0x, y cuáles ya han estado en C++03? Tal vez alguien sabe de un enlace a algún lugar?

¿Qué no se puede implementar sin ganchos de compilador?

C++11 proporciona <type_traits> estándar. ¿Cuáles de ellos son imposibles de implementar sin ganchos de compilador? ... 2984 donde algunos rasgos de tipo contienen la siguiente nota: se cree que requieren soporte de compilador (gracias sehe).

restringir el uso de plantillas de c++ a tipos de POD

Tengo una clase de plantilla c++, que solo funciona correctamente si el tipo templatizado es datos antiguos. Cualquier cosa c ... enerate error myclass<std::string> a; //this should be fine myclass<int> b; ¿Hay algún truco para hacer esto?