#include <iostream>
#include <array>
#include <utility>
#include <cstring>
namespace detail
{
template <typename C, std::size_t N, std::size_t...Is>
constexpr std::array<C, sizeof...(Is) + 1> truncate(const C(&s)[N], std::index_sequence<Is...>)
{
return {(Is < N ? s[Is] : 0)..., 0};
}
}
template <std::size_t L, typename C, std::size_t N>
constexpr std::array<C, L + 1> truncate(const C(&s)[N])
{
return detail::truncate(s, std::make_index_sequence<L>{});
}
#define SOMETEXT "example"
#define limit 8
int main()
{
constexpr auto text8 = truncate<limit>(SOMETEXT);
std::cout << "text = " << text8.data() << std::endl;
std::cout << "len(text) = " << strlen(text8.data()) << " <= " << limit << std::endl;
constexpr auto text4 = truncate<4>(SOMETEXT);
std::cout << "text = " << text4.data() << std::endl;
std::cout << "len(text) = " << strlen(text4.data()) << " <= " << 4 << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8Y3N0cmluZz4KCm5hbWVzcGFjZSBkZXRhaWwKewp0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgc3RkOjpzaXplX3QgTiwgc3RkOjpzaXplX3QuLi5Jcz4KY29uc3RleHByIHN0ZDo6YXJyYXk8Qywgc2l6ZW9mLi4uKElzKSArIDE+IHRydW5jYXRlKGNvbnN0IEMoJnMpW05dLCBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKewoJcmV0dXJuIHsoSXMgPCBOID8gc1tJc10gOiAwKS4uLiwgMH07Cn0KCQp9Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTCwgdHlwZW5hbWUgQywgc3RkOjpzaXplX3QgTj4KY29uc3RleHByIHN0ZDo6YXJyYXk8QywgTCArIDE+IHRydW5jYXRlKGNvbnN0IEMoJnMpW05dKQp7CglyZXR1cm4gZGV0YWlsOjp0cnVuY2F0ZShzLCBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8TD57fSk7Cn0KCiNkZWZpbmUgU09NRVRFWFQgImV4YW1wbGUiCiNkZWZpbmUgbGltaXQgOAoKaW50IG1haW4oKQp7Cgljb25zdGV4cHIgYXV0byB0ZXh0OCA9IHRydW5jYXRlPGxpbWl0PihTT01FVEVYVCk7CiAgICBzdGQ6OmNvdXQgPDwgInRleHQgPSAiIDw8IHRleHQ4LmRhdGEoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgImxlbih0ZXh0KSA9ICIgPDwgc3RybGVuKHRleHQ4LmRhdGEoKSkgPDwgIiA8PSAiIDw8IGxpbWl0IDw8IHN0ZDo6ZW5kbDsKCWNvbnN0ZXhwciBhdXRvIHRleHQ0ID0gdHJ1bmNhdGU8ND4oU09NRVRFWFQpOwogICAgc3RkOjpjb3V0IDw8ICJ0ZXh0ID0gIiA8PCB0ZXh0NC5kYXRhKCkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJsZW4odGV4dCkgPSAiIDw8IHN0cmxlbih0ZXh0NC5kYXRhKCkpIDw8ICIgPD0gIiA8PCA0IDw8IHN0ZDo6ZW5kbDsKfQo=