second mapa clase c++ c++11 std-pair static-assert

c++ - mapa - ¿Por qué std:: make_pair no devuelve un par? O lo hace?



string map c++ (1)

Usted declaró pair_of_ints como constexpr que implica const :

[dcl.constexpr]#9

Un especificador constexpr utilizado en una declaración de objeto declara que el objeto es const .

Entonces el tipo de pair_of_ints es en realidad:

const std::pair<int, int>

typeid ignora los calificadores cv, por lo que esta información no aparece en el nombre:

[expr.typeid]#5

Si el tipo de la expresión o tipo-id es un tipo calificado por el cv, el resultado de la expresión typeid refiere a un objeto std::type_info que representa el tipo no calificado por el cv.

Puede probar contra el tipo const-calificado, o eliminar el const-qualifier usando std::remove_const_t :

static_assert(std::is_same<decltype(pair_of_ints), const std::pair<int, int>>::value); static_assert(std::is_same<std::remove_const_t<decltype(pair_of_ints)>, std::pair<int, int>>::value);

Mi comprobación de validez interna falló, así que la estoy ejecutando nuevamente en Stackoverflow.

El siguiente código:

#include <iostream> #include <typeinfo> #include <utility> int main() { constexpr auto pair_of_ints = std::make_pair(1, 2); std::cerr << typeid(pair_of_ints).name(); //static_assert(std::is_same<decltype(pair_of_ints), std::pair<int, int>>::value, "WTF"); }

produce el nombre del símbolo mutilado para std::__1::pair<int, int> en mi sistema (XCode Clang 8.x).

Si luego static_assert el static_assert , falla. No tengo ni idea de porqué. ¿Cómo puedo hacer este trabajo? Tengo una función que devuelve un par o tupla dependiendo de los argumentos que se le pasaron y me gustaría verificar que realmente devuelva un par o tupla en los casos correctos.