Я пытаюсь скомпилировать следующий код:
#include <string_view>
constexpr size_t get_member_count(const char * va)
{
const char * p = va;
size_t count = 1;
while (*p != 0)
{
if (*p++ == ',')
{
++count;
}
}
return count;
}
template <const char * va>
constexpr auto get_member_names()
{
constexpr size_t count = get_member_count(va);
static std::basic_string_view<char> v[count];
//fill the array here
return v;
}
int main()
{
constexpr const char * mem_list = "a, b, c";
constexpr auto v = get_member_names<mem_list>();
}
И MSVC 2017, и GCC 9 не компилируют 'get_member_names ()', сообщая 'не найдено подходящей перегруженной функции' или 'нет подходящей функции дляВызовите соответственно.
Функция get_member_count компилируется, и я могу сделать:
constexpr size_t mem_count = get_member_count(mem_list);