2014-02-06 2 views
3

이 함수 선언에 잘못된 것이 있습니까? variadic 템플릿이있는 종속 형식

template<typename... Containers> 
std::tuple<typename Containers::value_type...> 
foo(const Containers &...args); 

나는 다음과 같이 호출하려고

:

foo(std::list<int>(), std::vector<float>()); 

MSVC2013는 error C2027: use of undefined type 'std::tuple<Containers::value_type>을 말한다.

"후기 반환"구문을 사용하여 함수 선언을 다시 작성하려고했지만 아무런 차이가 없었습니다.

이 코드의 목적을 달성 할 수있는 방법이 있습니까?

+5

당신이 #INCLUDE '아마도'에 잊어 버리셨습니까? – chris

+0

아니, 알아 냈어. – slyqualin

답변

4

마이크로 소프트 connect에 버그 리포트를 작성할 권리가 있습니다 ... 코드는 clang 및 gcc에서 정상입니다.

VS2013에 해결 어쩌면 4.7 gcc를 :

template <typename T> 
using ValueType = typename T::value_type; 

template<typename... Containers> 
std::tuple<ValueType<Containers>...> 
foo(const Containers &...args) { return {}; } 
+0

내 gcc 버전에 없습니다. 어느 쪽을 사용하고 있습니까? gcc 4.7.2에서 버그 보고서를 제출하도록 요청하는 이상한 오류가 발생합니다. – JorenHeit

+0

g ++ 4.8.2, C++ 11은 정말로 평범한 C++보다 안정적이지 못합니다. 컴파일러는 빠르게 진화합니다. http://coliru.stacked-crooked.com/a/e554d0c9b837df67 – galop1n

+0

그래, 알아. 고급 템플릿과 4.7.2 문제가 있었지만 배포판에 아직 4.8.x가 없습니다. – JorenHeit

관련 문제