- #include <iostream> 
-   
- template<typename = void> 
- struct A_impl 
- { 
- 	static A_impl const values[]; 
- 	static A_impl const& X; 
- 	static A_impl const& Y; 
- 	static A_impl const& Z; 
-   
- 	constexpr operator int() const { return _value; } 
-   
- 	int const _value; 
- }; 
-   
- template<typename T> 
- constexpr A_impl<T> const A_impl<T>::values[]{ 42, 43, 44 }; 
- template<typename T> 
- constexpr A_impl<T> const& A_impl<T>::X{ values[0U] }; 
- template<typename T> 
- constexpr A_impl<T> const& A_impl<T>::Y{ values[1U] }; 
- template<typename T> 
- constexpr A_impl<T> const& A_impl<T>::Z{ values[2U] }; 
-   
- using A = A_impl<>; 
-   
- template<int N> 
- constexpr int foo() 
- { 
- 	return N; 
- } 
-   
- int main(int, char**) noexcept 
- { 
- 	std::cout << foo<A::values[1U]>() << "\n" 
- 		<< foo<A::Z>(); 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgPSB2b2lkPgpzdHJ1Y3QgQV9pbXBsCnsKCXN0YXRpYyBBX2ltcGwgY29uc3QgdmFsdWVzW107CglzdGF0aWMgQV9pbXBsIGNvbnN0JiBYOwoJc3RhdGljIEFfaW1wbCBjb25zdCYgWTsKCXN0YXRpYyBBX2ltcGwgY29uc3QmIFo7CgkKCWNvbnN0ZXhwciBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiBfdmFsdWU7IH0KCQoJaW50IGNvbnN0IF92YWx1ZTsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNvbnN0ZXhwciBBX2ltcGw8VD4gY29uc3QgQV9pbXBsPFQ+Ojp2YWx1ZXNbXXsgNDIsIDQzLCA0NCB9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjb25zdGV4cHIgQV9pbXBsPFQ+IGNvbnN0JiBBX2ltcGw8VD46Olh7IHZhbHVlc1swVV0gfTsKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY29uc3RleHByIEFfaW1wbDxUPiBjb25zdCYgQV9pbXBsPFQ+OjpZeyB2YWx1ZXNbMVVdIH07CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNvbnN0ZXhwciBBX2ltcGw8VD4gY29uc3QmIEFfaW1wbDxUPjo6WnsgdmFsdWVzWzJVXSB9OwoKdXNpbmcgQSA9IEFfaW1wbDw+OwoKdGVtcGxhdGU8aW50IE4+CmNvbnN0ZXhwciBpbnQgZm9vKCkKewoJcmV0dXJuIE47Cn0KCmludCBtYWluKGludCwgY2hhcioqKSBub2V4Y2VwdAp7CglzdGQ6OmNvdXQgPDwgZm9vPEE6OnZhbHVlc1sxVV0+KCkgPDwgIlxuIgoJCTw8IGZvbzxBOjpaPigpOwoJcmV0dXJuIDA7Cn0=