Ошибка числового литерального оператора

Почему этот код:

constexpr float operator "" _deg(long double d) {
// returns radians
return d*3.1415926535/180;
}

static const float ANGLES[] = {-20_deg, -10_deg, 0_deg, 10_deg, 20_deg};

Произведите 5 из этих ошибок:

ошибка: невозможно найти числовой литеральный оператор ‘operator’ ‘_deg’

Я использую GCC 4.7.3. (arm-none-eabi-g++с -std=c++0x флаг).

9

Решение

Кажется, что GCC не выполняет преобразования типов с пользовательскими литералами, например, -10 в -10_deg считается целым числом.

добавлять .0 на все номера, и это должно работать:

static const float ANGLES[] = {-20.0_deg, -10.0_deg, 0.0_deg, 10.0_deg, 20.0_deg};

Конечно, вы также можете добавить еще одну операторскую функцию, принимая int в качестве аргумента.

10

Другие решения

Добавление определения

constexpr float operator "" _deg(unsigned long long d) {
// returns radians
return d*3.1415926535/180;
}

заставляет это работать.

7

По вопросам рекламы [email protected]