我使用GCC 4.8来编译下面的代码:
#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 make_unique<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); // Compilation error }
任何人都可以从编译器中解释这个错误的原因?
main.cpp: In instantiation of ‘std::unique_ptr make_unique(Args&&
…) [with T = S; Args = {int}]’:main.cpp:11:58: required from ‘static std::unique_ptr
S::create(Args&& …) [with Args = {int}]’main.cpp:20:26: required from here
main.cpp:14:5: error: ‘S::S(int)’ is private
06001
main.cpp:5:65: error: within this context
return std::unique_ptr(new T{std::forward(args)…});06002
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。