Вы не можете сделать это с constexpr const char*
, так как это теряет информацию о размере. Но вы можете от constexpr char[]
, что у вас есть от литерала, и это достаточно просто:
#include <array>
#include <utility>
template<size_t N, size_t I, size_t... Ix>
constexpr auto make_array(const char (&arr)[N], std::index_sequence<Ix...>) {
return std::array<char, I>{arr[Ix]...};
}
struct A{
template<std::size_t N>
constexpr A(const char (&p)[N]) :
a(make_array<N, 512>(p, std::make_index_sequence<N>{})) {}
std::array<char, 512> a;
};
int main()
{
constexpr decltype(auto) s = "asdasd";
constexpr A a(s);
}