从一些元编程代码开始:
template<class... Ts>
class list {}; //a generic container for a list of types
template<class in_list_type>
class front //get the type of the first template parameter
{
template<template<class...> class in_list_less_template_type, class front_type, class... rest_types>
static front_type deduce_type(in_list_less_template_type<front_type, rest_types...>*);
public:
typedef decltype(deduce_type((in_list_type*)nullptr)) type;
};
此代码适用于此:
typedef typename front<list<int, float, char>>::type type; //type is int
但是当第一项是函数类型时编译失败:
// no matching function for call to 'deduce_type'
typedef typename front<list<void (), float, char>>::type type;
我目前只能访问 XCode,无法确认这是否只是一个 XCode 错误。我正在使用 XCode 4.5.1,使用 Apple LLVM 编译器 4.1。