#include "stdafx.h"
import std.core;
import M;
using namespace M;
int main()
{
std::vector vec;
std::list list;
vec.push_back(1);
int temp = M::test(100);
printf("%d\n", temp);
return 0;
}
namespace detail {
template
constexpr decltype(auto) apply_impl(F&& f, Tuple&& t, std::index_sequence)
{
return std::invoke(std::forward(f), std::get(std::forward(t))...);
}
} // namespace detail
template
constexpr decltype(auto) apply(F&& f, Tuple&& t)
{
return detail::apply_impl(
std::forward(f), std::forward(t),
std::make_index_sequence>>{});
}
struct A {
A(int&& n) { std::cout << "rvalue overload, n=" << n << "\n"; }
A(int& n) { std::cout << "lvalue overload, n=" << n << "\n"; }
};
class B {
public:
template
B(T1&& t1, T2&& t2, T3&& t3) :
a1_{std::forward(t1)},
a2_{std::forward(t2)},
a3_{std::forward(t3)}
{
}
private:
A a1_, a2_, a3_;
};
template
std::unique_ptr make_unique1(U&& u)
{
return std::unique_ptr(new T(std::forward(u)));
}
template
std::unique_ptr make_unique2(U&&... u)
{
return std::unique_ptr(new T(std::forward(u)...));
}
int main()
{
auto p1 = make_unique1(2); // rvalue
int i = 1;
auto p2 = make_unique1(i); // lvalue
std::cout << "B\n";
auto t = make_unique2(2, i, 3);
}