2011-08-07 8 views
7

생성자에 대한 템플릿 인수 공제가 C++ 0x에 있습니까 (또는 특정 시점에서 C++ 0x를 가졌습니까?)? 생성자에 대한 템플릿 인수 공제액

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

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

이이 위임 make_foo 기능 템플릿을 마지막으로 중복 된 것을 뜻 : An Overview of the Coming C++ (C++0x) Standard, 나는 다음 줄을 보았다?

+1

오, 나는 클래스 템플릿의 생성자를 클래스의 생성자 템플릿과 혼동했다고 생각합니다. 여전히 흥미로운 질문인데, methinks. – fredoverflow

답변

14

템플릿 인수 공제는 생성자를 포함한 모든 함수에서 작동합니다. 그러나 생성자에 전달 된 인수에서 클래스 템플릿 매개 변수를 추론 할 수는 없습니다. 그리고 아니, 당신은 C++ 0x 중 하나에서 그것을 할 수 없습니다.

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_guardthread는 클래스 템플릿되지 않습니다. 그들은 생성자 템플릿을 가지고 있습니다.

+0

귀하의 게시물은 2011 년 이었지만 C++ 1y가 곧 업데이트해야합니다 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3836.html보세요 페이지의 N3602 종이 (http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html). – daminetreg

관련 문제