initializer_list
The other day I used some test coding and created a vector with some points like the following:
std::vector<Point> vecPoint{10};
Unfortunately this didn't created a std::vector
of 10 points. Instead this was intepreted as an initializer_list since the point class had a possiblity to be created from one argument. The code was somewhat similar to this one (but templated):
struct Point
{
Point (int x = 0, int y = 0);
};
The Point class was adjusted but the problem is also with std::vector
. The ambiguity can easily be solved by introducing a jumper class as size argument. Example:
struct Size
{
Size(size_t n)
};
Size operator ""_sz(size_t n)
{
return Size{n};
}
template<class T, class Allocator = std::allocator<T>>
class vector
{
public:
vector(Size n);
};
There is no ambiguity now:
void f() { std::vector<Point> vec1{10_sz}; //
initialized with
10 default constructed points std::vector<Point> vec2{10}; // initialized with one point }