Can anyone tell me the rationale for not allowing explicit specialization in non-namespace scope? Why must I do:
template <typename ...Ts>
struct types;
template <typename T, typename ...Ts>
struct types < T, Ts... > : public types<Ts...>
{
template <typename F, int i = 0>
struct find : public types<Ts...>::template find<F, i>
{
};
template <int i>
struct find < T, i > : public std::true_type
{
typedef T type;
};
};
template <>
struct types < >
{
template <typename F, int i = 0>
struct find : public std::false_type
{};
};
and not:
template <typename ...Ts>
struct types;
template <typename T, typename ...Ts>
struct types < T, Ts... > : public types<Ts...>
{
template <typename F>
struct find : public types<Ts...>::template find<F>
{
};
template <>
struct find < T > : public std::true_type
{
typedef T type;
};
};
template <>
struct types < >
{
template <typename F>
struct find : public std::false_type
{};
};