MPL コードを呼び出すメタ関数を作成しようとすると、何かが足りないようです。次のコードは、inst2 では次のエラーでコンパイルに失敗しますが、inst1 では正常に動作します。
エラー C2903: 'apply': シンボルはクラス テンプレートでも関数テンプレートでもありません
using namespace boost::mpl;
template <typename VECTOR>
struct first_element : mpl::at_c<VECTOR, 0> {};
int main()
{
typedef vector<
vector<int, int>,
vector<int, int>,
vector<int, int>> lotso;
typedef mpl::transform<lotso,
first_element<_1>>::type inst1;
typedef first_element<
at_c<lotso,0>>::type inst2;
return 0;
}