#include <array>
#include <string>

template<size_t N>
struct constant_integer
{
    enum { size = N };
};

template<size_t N, typename T>
constant_integer<N> array_size( const std::array<T, N>& );

int main(void)
{
    std::array<std::string, 42> a1;
    std::array<int, decltype(array_size(a1))::size> a2;
}
