El código siguiente se compila con gcc-4.5.1 pero no en Visual Studio 11.Studio 11 de error visual en tiempo de compilación usando std :: mapa
#include <map>
#include <array>
typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus;
int main(){
std::map<const unsigned int, std::array<const unsigned int, 4> > x;
std::array<const unsigned int, 4> troll = {1, 2, 3, 4};
x.insert(pairus(1, troll));
auto z = x[1];
}
1 ahora se asigna a std::array<> troll
. La inserción funciona bien y el programa se compila. Pero, tan pronto como lo intento auto z = x[1]
-> Por lo tanto, tratando de obtener la matriz trol que 1
se correlaciona con, el programa no se compila con el siguiente error:
error C2512: 'std::array<_Ty,_Size>::array'
: ningún constructor predeterminado adecuado disponible
¿Qué causa esta diferencia en el comportamiento entre gcc y vs11 y cómo solucionarlo?
Gracias.
¿Estás seguro de que 'pairus' no debería ser' make_pair'? (No creo que ese sea su problema) – Corbin
Sí, funciona bien con el par siendo de tipo std :: pair <>. Este extraño comportamiento del compilador me está volviendo loco. – ScarletAmaranth
¿Cómo se ve el par (suponiendo que sea una función personalizada o es el alias de make_pair de MSVC++?). Sospecho que el problema puede estar en el par porque no hay necesidad de un constructor predeterminado en ninguna parte del código que publicaste. (Aunque se necesitaría un ctor predeterminado si hiciera x [k] donde k no está en el mapa.) – Corbin