데비안 (Debian) 스퀴즈에서 gcc 4.4를 사용하고 있습니다. 다음 코드를 고려하십시오.템플릿 템플릿 매개 변수 및 gcc가있는 가변 템플릿 4.4
#include <map>
#include <string>
using std::map;
using std::string;
// Args lets the user specify additional explicit template arguments
template <typename T,
template <typename T, typename... Args> class C,
typename... Args>
C<T, Args...> foo()
{
C<T, Args...> x;
return x;
}
int main(void)
{
map<string, int> a = foo<string, map, int>();
}
그래서, 여기에 아이디어는 그 T
일치 string
, C
경기 map
및 템플릿 매개 변수 팩 Args
일치 int
. 구문 오류가있을 수 있으므로 수정하십시오. 특히 class C
의 첫 번째 템플릿 인수가 T
과 일치하고 나머지가 템플릿 매개 변수 팩 Args
과 일치하도록하려면 template <typename T, typename... Args> class C
올바른 구문입니까?
이
이 질문 Variadic template templates and perfect forwarding 유사하게 나타나는 오류를In function 'int main()':
post.cc:18: error: no matching function for call to 'foo()'
을 제공합니다. 그 질문은 이것이 gcc 버그라는 것을 암시하지만 어쩌면 나는이 질문들이 똑같은 것임을 생각하는 데 착각 할 것입니다.
친절하십시오. variadic 템플릿에 대한 지식은 12 시간 미만입니다. 나는 복제를 줄이기 위해 오래된 C++ 코드를 다시 작성하려고 시도했을뿐입니다. 내가 C++을 한 이후로 역시 오래되었습니다. 해결 방법이 있으면 알려주십시오. 감사.
편집 : Variadic template templates and perfect forwarding에 의해 제안 된 해결 방법은 Ise Wisteria이 나를 위해 일한, 이것은 동일한 버그 제안합니다. 물론, 저는 지금 입니다. (a)이 해결 방법이 얼마나 허술한 지, (b) 왜 작동하는지, 그리고 이세가 그것을 생각하게 한 이유는 무엇입니까? 이세 만이 마지막 비트에 대답 할 수 있다고 생각합니다. :-)
코드는 g ++ 4.7에서 컴파일됩니다. 버그 야. – kennytm
@KennyTM : 감사합니다. 그게 내가보고 할 필요가 없다는 뜻이지? –
오른쪽. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ – kennytm