开发者

template argument deduction for constructors [duplicate]

开发者_StackOverflow中文版This question already has answers here: Why not infer template parameter from constructor? (12 answers) Closed 6 years ago.

Does C++0x have (or was C++0x at some point in time going to have) template argument deduction for constructors? In An Overview of the Coming C++ (C++0x) Standard, I saw the following lines:

std::lock_guard l(m);   // at 7:00

std::thread t(f);       // at 9:00

Does this mean that delegating make_foo function templates are finally redundant?


Template argument deduction works for any function, including the constructor. But you can't deduce the class template parameters from arguments passed to the constructor. And no, you can't do it in C++0x either.

struct X
{
    template <class T> X(T x) {}
};

template <class T>
struct Y
{
    Y(T y) {} 
};

int main()
{
   X x(3); //T is deduced to be int. OK in C++03 and C++0x; 
   Y y(3); //compiler error: missing template argument list. Error in 03 and 0x
}

lock_guard and thread aren't class templates. They have constructor templates though.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜