Reputation: 1182
I am getting the following error:
braced initialization of a variable declared with a placeholder type but without `=` requires exactly one element inside the braces
const auto temperature_units{
{"K", [] (double x)->double {return x;}},
{"C", [] (double x)->double {return x+273.15;}},
{"\u2103", [] (double x)->double {return x+273.15;}}, // degree celcius symbol
{"\u00B0C", [] (double x)->double {return x+273.15;}}, // degree symbol plus C
{"F", [] (double x)->double {return (x+459.67)*5.0/9.0;}},
{"\u2109", [] (double x)->double {return (x+459.67)*5.0/9.0;}},// degree fahrenheit symbol
{"\u00B0F", [] (double x)->double {return (x+459.67)*5.0/9.0;}}
};
Something like
const std::map<std::string, auto> temperature_units{
{"K", [] (double x)->double {return x;}},
{"C", [] (double x)->double {return x+273.15;}},
{"\u2103", [] (double x)->double {return x+273.15;}}, // degree celcius symbol
{"\u00B0C", [] (double x)->double {return x+273.15;}}, // degree symbol plus C
{"F", [] (double x)->double {return (x+459.67)*5.0/9.0;}},
{"\u2109", [] (double x)->double {return (x+459.67)*5.0/9.0;}},// degree fahrenheit symbol
{"\u00B0F", [] (double x)->double {return (x+459.67)*5.0/9.0;}}
};
also does not work as that is error: invalid use of ‘auto
apparently. I am not sure how else to write this, as apparently lambdas do not have a defined type
Upvotes: 0
Views: 61
Reputation: 37607
using namespace std::literals;
const std::map temperature_units {
std::make_pair("K"s, std::function<double(double)>{[] (double x)->double {return x;}}),
{"C"s, [] (double x)->double {return x+273.15;}},
{"\u2103"s, [] (double x)->double {return x+273.15;}}, // degree celcius symbol
{"\u00B0C"s, [] (double x)->double {return x+273.15;}}, // degree symbol plus C
{"F"s, [] (double x)->double {return (x+459.67)*5.0/9.0;}},
{"\u2109"s, [] (double x)->double {return (x+459.67)*5.0/9.0;}},// degree fahrenheit symbol
{"\u00B0F"s, [] (double x)->double {return (x+459.67)*5.0/9.0;}}
};
https://godbolt.org/z/M5er48 some variation https://godbolt.org/z/ozqG56
So basically problem is to enforce proper type of initialization list.
Upvotes: 1