我有以下小测试应用程序,我正在尝试使用模板使用声明。
然而,它没有编译。 (我正在使用gcc 4.6.1)
src / main.cpp:36:3:错误:在'使用'之前预期的unqualified-id
非常感谢任何见解!
#include <iostream>
#include <utility>
template<typename F, typename... Args>
struct invoke;
// specialisation of invoke for 1 parameter
template<typename F, typename A0>
struct invoke<F, A0>
{
invoke(F& f_, A0&& a0_)
: _f(f_)
, _a0(std::move(a0_))
{}
void operator()()
{
_f(_a0);
}
F _f;
A0 _a0;
};
template<typename F>
struct traits;
// fwd declaration for handler
struct handler;
// specialisation of traits for handler
template<>
struct traits<handler>
{
template<class F, typename... Args>
using call_t = invoke<F, Args...>; // line 36
};
template<typename F>
struct do_it
{
template<typename... Args>
void operator()(F& _f, Args... args)
{
// create an object of the type declared in traits, and call it
typename traits<F>::template call_t<F, Args...> func(_f, std::forward<Args>(args)...);
func();
}
};
struct handler
{
void operator()(int i)
{
std::cout << i << std::endl;
}
};
int main()
{
handler h;
do_it<handler> d;
d(h, 4);
return 0;
}
答案 0 :(得分:3)
根据这个:http://wiki.apache.org/stdcxx/C++0xCompilerSupport和此:http://gcc.gnu.org/projects/cxx0x.html
模板别名不在GCC 4.6中\应该有一个修补它的补丁。
(我可能会误以为您使用的是模板别名,因此这可能不适用于您。我对C ++ 11不是很熟悉)