#include <iostream>
#include <type_traits>
#include <utility>
template<typename Ty, std::size_t N>
void foo(Ty (&&)[N])
{
std::cout << "Ty (&&)[" << N << "]\t" << std::is_const<Ty>::value << '\n';
}
template<typename Ty, std::size_t N>
void foo(Ty (&)[N])
{
std::cout << "Ty (&)[" << N << "]\t" << std::is_const<Ty>::value << '\n';
}
template<typename Ty>
using id = Ty;
int main()
{
std::cout.setf(std::cout.boolalpha);
foo(id<int[]>{1, 2, 3, 4, 5});
foo(id<int const[]>{1, 2, 3, 4, 5}); // <-- HERE.
int xs[]{1, 2, 3, 4, 5};
foo(xs);
int const ys[]{1, 2, 3, 4, 5};
foo(ys);
foo(std::move(xs));
foo(std::move(ys));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx1dGlsaXR5PgoKdGVtcGxhdGU8dHlwZW5hbWUgVHksIHN0ZDo6c2l6ZV90IE4+CnZvaWQgZm9vKFR5ICgmJilbTl0pCnsKICAgIHN0ZDo6Y291dCA8PCAiVHkgKCYmKVsiIDw8IE4gPDwgIl1cdCIgPDwgc3RkOjppc19jb25zdDxUeT46OnZhbHVlIDw8ICdcbic7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFR5LCBzdGQ6OnNpemVfdCBOPgp2b2lkIGZvbyhUeSAoJilbTl0pCnsKICAgIHN0ZDo6Y291dCA8PCAiVHkgKCYpWyIgPDwgTiA8PCAiXVx0IiA8PCBzdGQ6OmlzX2NvbnN0PFR5Pjo6dmFsdWUgPDwgJ1xuJzsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVHk+CnVzaW5nIGlkID0gVHk7CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dC5zZXRmKHN0ZDo6Y291dC5ib29sYWxwaGEpOwoKICAgIGZvbyhpZDxpbnRbXT57MSwgMiwgMywgNCwgNX0pOwogICAgZm9vKGlkPGludCBjb25zdFtdPnsxLCAyLCAzLCA0LCA1fSk7IC8vIDwtLSBIRVJFLgogICAgaW50IHhzW117MSwgMiwgMywgNCwgNX07CiAgICBmb28oeHMpOwogICAgaW50IGNvbnN0IHlzW117MSwgMiwgMywgNCwgNX07CiAgICBmb28oeXMpOwogICAgZm9vKHN0ZDo6bW92ZSh4cykpOwogICAgZm9vKHN0ZDo6bW92ZSh5cykpOwp9