Hi, On 2014-08-26 04:22, TONGARI J wrote:
Actually I've found an even simpler way:
``` template<char...> struct str {};
template<std::size_t... Ns, class S> auto make_str_impl(std::index_sequence<Ns...>, S s) { return str<s.get()[Ns]...>(); }
template<class S> auto make_str(S s) { return make_str_impl(std::make_index_sequence<sizeof(s.get()) - 1>(), s); }
#define LIT(s) make_str([] \ { \ struct \ { \ static constexpr decltype(auto) get() \ { \ return s; \ } \ } _; \ return _; \ }()) ```
Compile time strings without the length limit would be great. The way I'm using them is instantiating template classes with the string as a template argument. So the way I'd use it would be something like: ---- template <class String> struct metafunction_expecting_a_string; metafunction_expecting_a_string<decltype(LIT("Hello"))> ---- I've tried your solutions with the latest Clang in svn, but the compiler complained about having a lambda expression in an unevaluated operand. Did you manage to use these strings as template arguments somehow? Regards, Ábel