Question

Why does this code:

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

Produce 5 of these errors:

error: unable to find numeric literal operator 'operator"" _deg'

I am using GCC 4.7.3. (arm-none-eabi-g++, with the -std=c++0x flag).

Was it helpful?

Solution

It seems GCC doesn't do type conversions with user-defined literals, so e.g. the -10 in -10_deg is considered to be an integer.

Add .0 to all numbers and it should hopefully work:

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

Of course, you can also add another operator function taking int as argument.

OTHER TIPS

Adding the definition

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

makes it work.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top