2016-08-29 3 views
5

я исследовал, насколько я мог бы взять constexpr обугленного сопза * конкатенация из этого ответа: constexpr to concatenate two or more char stringsconstexpr с конкатенацией, параметры, используемые в контексте constexpr

У меня есть следующий код пользователя, который показывает, что именно я м пытается сделать. Похоже, что компилятор не может видеть, что параметры функции (a и b) передаются как constexpr.

Может ли кто-нибудь увидеть способ сделать два, которые я указываю, не работает ниже, на самом деле работает? Было бы чрезвычайно удобно объединять массивы символов с помощью таких функций.

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(); 
    } 
} 

LIVE example

ответ

4

concat потребность const char (&)[N], и в обоих вашем случае тип будет const char*, так что вы можете изменить свою функцию:

template<typename A, typename B> 
constexpr auto 
test1(const A& a, const B& b) 
{ 
    return concat(a, b); 
} 

Demo

 Смежные вопросы

  • Нет связанных вопросов^_^