#include <iostream>
#include <vector>
#include <utility>
using namespace std;
using queens = std::vector<std::pair<size_t, size_t>>;
void test(queens q = {})
{
q = queens{std::make_pair<size_t, size_t>(2,1)};
size_t i = 2;
q = queens{std::make_pair<size_t, size_t>(i, 1)}; // crap
//q = queens{std::make_pair<size_t, size_t>(i, static_cast<size_t>(1))}; // same
}
int main()
{
queens q;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dXRpbGl0eT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIHF1ZWVucyA9IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxzaXplX3QsIHNpemVfdD4+OwoKdm9pZCB0ZXN0KHF1ZWVucyBxID0ge30pCnsKICBxID0gcXVlZW5ze3N0ZDo6bWFrZV9wYWlyPHNpemVfdCwgc2l6ZV90PigyLDEpfTsKICBzaXplX3QgaSA9IDI7CiAgcSA9IHF1ZWVuc3tzdGQ6Om1ha2VfcGFpcjxzaXplX3QsIHNpemVfdD4oaSwgMSl9OwkJCS8vIGNyYXAKICAvL3EgPSBxdWVlbnN7c3RkOjptYWtlX3BhaXI8c2l6ZV90LCBzaXplX3Q+KGksIHN0YXRpY19jYXN0PHNpemVfdD4oMSkpfTsJLy8gc2FtZQkKfQoKaW50IG1haW4oKSAKewogIHF1ZWVucyBxOwogIHJldHVybiAwOwp9
prog.cpp: In function ‘void test(queens)’:
prog.cpp:12:49: error: no matching function for call to ‘make_pair(size_t&, int)’
q = queens{std::make_pair<size_t, size_t>(i, 1)}; // crap
^
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
from /usr/include/c++/6/bits/char_traits.h:39,
from /usr/include/c++/6/ios:40,
from /usr/include/c++/6/ostream:38,
from /usr/include/c++/6/iostream:39,
from prog.cpp:1:
/usr/include/c++/6/bits/stl_pair.h:493:5: note: candidate: template<class _T1, class _T2> constexpr std::pair<typename std::__decay_and_strip<_Tp>::__type, typename std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
make_pair(_T1&& __x, _T2&& __y)
^~~~~~~~~
/usr/include/c++/6/bits/stl_pair.h:493:5: note: template argument deduction/substitution failed:
prog.cpp:12:49: note: cannot convert ‘i’ (type ‘size_t {aka long unsigned int}’) to type ‘long unsigned int&&’
q = queens{std::make_pair<size_t, size_t>(i, 1)}; // crap
^
prog.cpp:12:50: error: no matching function for call to ‘std::vector<std::pair<long unsigned int, long unsigned int> >::vector(<brace-enclosed initializer list>)’
q = queens{std::make_pair<size_t, size_t>(i, 1)}; // crap
^
In file included from /usr/include/c++/6/vector:64:0,
from prog.cpp:2:
/usr/include/c++/6/bits/stl_vector.h:403:9: note: candidate: template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)
vector(_InputIterator __first, _InputIterator __last,
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:403:9: note: template argument deduction/substitution failed:
/usr/include/c++/6/bits/stl_vector.h:375:7: note: candidate: std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(initializer_list<value_type> __l,
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:375:7: note: conversion of argument 1 would be ill-formed:
/usr/include/c++/6/bits/stl_vector.h:350:7: note: candidate: std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(vector&& __rv, const allocator_type& __m)
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:350:7: note: candidate expects 2 arguments, 1 provided
/usr/include/c++/6/bits/stl_vector.h:341:7: note: candidate: std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(const vector& __x, const allocator_type& __a)
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:341:7: note: candidate expects 2 arguments, 1 provided
/usr/include/c++/6/bits/stl_vector.h:337:7: note: candidate: std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(vector&& __x) noexcept
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:337:7: note: conversion of argument 1 would be ill-formed:
/usr/include/c++/6/bits/stl_vector.h:320:7: note: candidate: std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(const vector& __x)
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:320:7: note: conversion of argument 1 would be ill-formed:
/usr/include/c++/6/bits/stl_vector.h:291:7: note: candidate: std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::pair<long unsigned int, long unsigned int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(size_type __n, const value_type& __value,
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:291:7: note: candidate expects 3 arguments, 1 provided
/usr/include/c++/6/bits/stl_vector.h:279:7: note: candidate: std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(size_type __n, const allocator_type& __a = allocator_type())
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:279:7: note: conversion of argument 1 would be ill-formed:
/usr/include/c++/6/bits/stl_vector.h:266:7: note: candidate: std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:266:7: note: conversion of argument 1 would be ill-formed:
/usr/include/c++/6/bits/stl_vector.h:255:7: note: candidate: std::vector<_Tp, _Alloc>::vector() [with _Tp = std::pair<long unsigned int, long unsigned int>; _Alloc = std::allocator<std::pair<long unsigned int, long unsigned int> >]
vector()
^~~~~~
/usr/include/c++/6/bits/stl_vector.h:255:7: note: candidate expects 0 arguments, 1 provided