#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;
}
