pairに以下のようなコンストラクタが追加されて、どうやって使うんだこれと思っていたのですが
namespace std { template <class T1, class T2> struct pair { ... template <class... Args1, class... Args2> pair(piecewise_construct_t, tuple<Args1...> first_args, tuple<Args2...> second_args); }; }
vector::emplace_backがコンストラクタ引数を受け取るように、
pairのpiecewiseコンストラクタはfirstとsecondのコンストラクタ引数をtupleでまとめて受け取るようです。
struct Point { Point(int x, int y) {} }; std::pair<Point, Point> p(std::piecewise_construct, std::pack_arguments(1, 2), std::pack_arguments(3, 4));
コンストラクタ内では、get<0>(first_args), get<1>(first_args)...を転送してfirstを構築します。
追記:
Uniform Initializationがあるからこれでいっか。
struct Point { Point(int x, int y) {} }; std::pair<Point, Point> p(std::piecewise_construct, {1, 2}, {3, 4});
http://twitter.com/Cryolite/statuses/12979028446
http://twitter.com/Cryolite/statuses/12979061124
N3059 Proposal to Simplify pair (rev 5.2)