The following code compiles with gcc-4.5.1 but not in Visual Studio 11.
#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 is now mapped to std::array<> troll
. The insertion works well and the program compiles. But, as soon as i try auto z = x[1]
-> Therefore trying to get the array troll that 1
is mapped to, the program does not compile with the following error:
error C2512: 'std::array<_Ty,_Size>::array'
: no appropriate default constructor available
What causes this difference in behavior between gcc and vs11 and how to fix it ?
Thanks.
Try auto z = *x.find(1);
instead. The []
-operator requires a default-constructible type. In fact, the entire container requires a default-constructible type, so you really can't expect anything but random luck as you try out various implementations.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With