#include <memory>
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique(Args&& ...args) {
return std::unique_ptr<T>(new T{std::forward<Args>(args)...});
}
struct S {
template<class... Args>
static std::unique_ptr<S> create(Args&&... args) {
return std::unique_ptr<S>(new S(std::forward<Args>(args)...));
}
private: // if I remove this line, then the compilation is OK
S(int) {}
S() = default;
};
int main() {
auto s1 = S::create(); // OK
auto s2 = S::create(0); // Now OK as well
}
I2luY2x1ZGUgPG1lbW9yeT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIC4uLkFyZ3M+CiAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gbWFrZV91bmlxdWUoQXJncyYmIC4uLmFyZ3MpIHsKICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4obmV3IFR7c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4ufSk7Cn0KCnN0cnVjdCBTIHsKICAgIHRlbXBsYXRlPGNsYXNzLi4uIEFyZ3M+CiAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFM+IGNyZWF0ZShBcmdzJiYuLi4gYXJncykgewogICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Uz4obmV3IFMoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CiAgICB9CnByaXZhdGU6IC8vIGlmIEkgcmVtb3ZlIHRoaXMgbGluZSwgdGhlbiB0aGUgY29tcGlsYXRpb24gaXMgT0sKICAgIFMoaW50KSB7fQogICAgUygpID0gZGVmYXVsdDsKfTsKCmludCBtYWluKCkgewogICAgYXV0byBzMSA9IFM6OmNyZWF0ZSgpOyAvLyBPSwogICAgYXV0byBzMiA9IFM6OmNyZWF0ZSgwKTsgLy8gTm93IE9LIGFzIHdlbGwKfQ==