何か見逃したのかもしれませんが、ヒントが見つかりません。C++17 には constexpr-if に相当する constexpr 三項演算子がありますか?
template<typename Mode>
class BusAddress {
public:
explicit constexpr BusAddress(Address device) :
mAddress(Mode::write ? (device.mDevice << 1) : (device.mDevice << 1) | 0x01) {}
private:
uint8_t mAddress = 0;
};
ベストアンサー1
いいえ、条件演算子はありませんconstexepr
。しかし、全体をラムダでラップしてすぐに評価することができます(国際):
template<typename Mode>
class BusAddress {
public:
explicit constexpr BusAddress(Address device)
: mAddress([&]{
if constexpr (Mode::write) {
return device.mDevice << 1;
}
else {
return (device.mDevice << 1) | 0x01;
}
}())
{ }
private:
uint8_t mAddress = 0;
};
最もセクシーなコードではないかもしれませんが、目的は達成できます。ラムダはconstexpr
可能な限りデフォルトで使用されていることに注意してください。N4487そしてP0170。