#include <memory>
#include <type_traits>
struct wrapper {
template<
typename T
, typename... Ts
, typename = typename std::enable_if<
!std::is_same<wrapper, typename std::decay<T>::type>::value
>::type
>
wrapper(T&& t, Ts&&... ts)
: p(std::forward<T>(t), std::forward<Ts>(ts)...)
{}
std::unique_ptr<int> p;
};
int
main()
{
// fine
wrapper w = nullptr;
// not fine:
// error: use of deleted function 'wrapper::wrapper(const wrapper&)'
wrapper const cw = nullptr;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKc3RydWN0IHdyYXBwZXIgewogICAgdGVtcGxhdGU8CiAgICAgICAgdHlwZW5hbWUgVAogICAgICAgICwgdHlwZW5hbWUuLi4gVHMKICAgICAgICAsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CiAgICAgICAgICAgICFzdGQ6OmlzX3NhbWU8d3JhcHBlciwgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlCiAgICAgICAgPjo6dHlwZQogICAgPgogICAgd3JhcHBlcihUJiYgdCwgVHMmJi4uLiB0cykKICAgICAgICA6IHAoc3RkOjpmb3J3YXJkPFQ+KHQpLCBzdGQ6OmZvcndhcmQ8VHM+KHRzKS4uLikKICAgIHt9CgogICAgc3RkOjp1bmlxdWVfcHRyPGludD4gcDsKfTsKCmludAptYWluKCkKewogICAgLy8gZmluZQogICAgd3JhcHBlciB3ID0gbnVsbHB0cjsKCiAgICAvLyBub3QgZmluZToKICAgIC8vIGVycm9yOiB1c2Ugb2YgZGVsZXRlZCBmdW5jdGlvbiAnd3JhcHBlcjo6d3JhcHBlcihjb25zdCB3cmFwcGVyJiknCiAgICB3cmFwcGVyIGNvbnN0IGN3ID0gbnVsbHB0cjsKfQ==