#include <iostream>
#include <array>

struct Foo {
  int i;
  static const std::array<Foo, 2> A;
};

constexpr std::array<Foo, 2> Foo::A {{{1}, {2}}};

template<int N>
int foo() { return N; }

int main(int, char**)
{
	std::cout << "Foo::A[0]: " << foo<Foo::A[0U].i>() << "\n"
		<< "Foo::A[1]: " << foo<Foo::A[1U].i>();
	return 0;
}