ja badał, jak daleko mogę wziąć const constexpr char * powiązanie z tej odpowiedzi: constexpr to concatenate two or more char stringsconstexpr c ciąg konkatenacji, parametry stosowane w kontekście constexpr
Mam następujący kod użytkownika, który pokazuje dokładnie to, co ja” Próbuję to zrobić. Wydaje się, że kompilator nie widzi, że parametry funkcji (a i b) są przekazywane jako constexpr.
Czy ktoś może zobaczyć sposób, w jaki te dwie, które wskazuję, nie działają poniżej, faktycznie działają? Byłoby niezwykle wygodnie móc łączyć tablice znaków za pomocą takich funkcji.
template<typename A, typename B>
constexpr auto
test1(A a, B b)
{
return concat(a, b);
}
constexpr auto
test2(char const* a, char const* b)
{
return concat(a, b);
}
int main()
{
{
// works
auto constexpr text = concat("hi", " ", "there!");
std::cout << text.data();
}
{
// doesn't work
auto constexpr text = test1("uh", " oh");
std::cout << text.data();
}
{
// doesn't work
auto constexpr text = test2("uh", " oh");
std::cout << text.data();
}
}