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 :
Un especificador
constexprutilizado en una declaración de objeto declara que el objeto esconst.
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:
Si el tipo de la expresión o tipo-id es un tipo calificado por el cv, el resultado de la expresión
typeidrefiere a un objetostd::type_infoque 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.