いくつかのメタプログラミングコードから始めます。
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のバグであるかどうかを確認できません。私はXCode4.5.1を使用しており、AppleLLVMコンパイラ4.1を使用しています。