declare a vector through decltype
c++, c++11, c++14, decltype, type-inference
Solution
The problem is that `decltype(c.begin()->first)` returns a `const int` (when using libstdc++ - your example compiles with libc++).
As your error tells you...
The C++ Standard forbids containers of const elements because allocator< const T > is ill-formed.
A possible solution is using `std::decay_t`:
std::vector<std::decay_t<decltype(c.begin()->first)>> lc;
This will guarantee that your example works both with libstdc++ and libc++. Alternatively, `std::remove_const_t` also works in this particular situation.
Here's a working example on wandbox.
Problem
``` #include "stdafx.h" #include <iostream> #include <vector> #include <map> template <typename T> auto Copy(T c) { std::vector<decltype(c.begin()->first)> lc; //Copying return lc; } int main() { std::map<int, int> map; Copy(map); return 0; } ``` In the above code I am trying declare a `vector` from the datatype of keys of `map` but I am getting following error - ``` "The C++ Standard forbids containers of const elements allocator<const T> is ill-formed." ```