C++11
std::tuple
과 같은 클래스를 작성하고 g++-4.7
으로 컴파일하려고하면 매우 이상한 상황이 발생했습니다. 기본적으로 필요한 것은 래핑 된 유형의 튜플입니다.매개 변수 팩 혼동
#include <tuple>
template <class T>
struct Wrapper { T x; };
template <class... Types>
using Tuple = std::tuple<Wrapper<Types>...>;
template <class... Types>
struct X
{
using MyTuple = Tuple<Types...>;
};
int main(int argc, char** argv)
{
// Tuple<int,int> t; // (1)
using Y = X<int,int>;
Y y; // (2)
return 0;
}
나는 다음과 같은 관측을했다 : 코드는 컴파일되지 않습니다
- :
- 내가
(1)
를 추가하면 컴파일 않는 I는 다음과 같이 썼다. (1)
및(2)
을 제거하면 컴파일됩니다. 1 :test.cpp: In instantiation of ‘struct X<int, int>’: test.cpp:22:4: required from here test.cpp:10:44: error: wrong number of template arguments (2, should be 1) test.cpp:4:8: error: provided for ‘template<class T> struct Wrapper’
질문에 대한
오류 메시지 : 코드 위의 제 생각은 정확하지만 실제로 매개 변수 팩을 사용하는 것은 이번이 처음이다. g++-4.7
이 실험용 구현이라는 사실을 제외하고 내 코드가 마음에 들지 않는 이유가 있습니까?
제공 한 코드가 정상적으로 컴파일되고 실수로'std :: tuple ...> 대신'std :: tuple >'을 작성한 것으로 보입니다. 게시하기 전에 실제 코드를 입력하고 다시 시도하십시오. –
Xeo
[GCC 4.8에서 컴파일] (http://coliru.stacked-crooked.com/view?id=2250fa21d618a80511a96c95725346f5-50d9cfc8a1d350e7409e81e87c2653ba) –
이것은 실제 코드입니다. 나는 당신이 묘사 한 실수를했다고 생각했지만, 실제로 나는 그렇게하지 않았다. –