:最小/最大/ステップ機能と「constexprの関数の本体...ないリターン文」
$ g++ -std=c++11 test.cxx -o test.exe
test.cxx: In instantiation of ‘static constexpr unsigned int MinMaxStep<min, max
, step>::ValidValue(unsigned int) [with unsigned int min = 10u; unsigned int max
= 100u; unsigned int step = 10u]’:
test.cxx:22:40: required from here
test.cxx:16:5: error: body of constexpr function ‘static constexpr unsigned int
MinMaxStep<min, max, step>::ValidValue(unsigned int) [with unsigned int min = 10
u; unsigned int max = 100u; unsigned int step = 10u]’ not a return-statement
}
^
で使用される値の全て問題関数はテンプレートパラメータです。ファイルを保存しても値は変更されません。
これをconstexpr
の機能として表現することはできませんか?
私が何か間違っているとしたら、それは何ですか? ValidVaue
をconstexpr
機能に変更するにはどうすればよいですか?
$ cat -n test.cxx
1 #include <string>
2 #include <iostream>
3
4 template <unsigned int min, unsigned int max, unsigned int step>
5 class MinMaxStep
6 {
7 public:
8 static constexpr unsigned int Min() { return min; }
9 static constexpr unsigned int Max() { return max; }
10 static constexpr unsigned int Step() { return step; }
11 static constexpr unsigned int ValidValue(unsigned int v)
12 {
13 if (v <= min) { return min; }
14 else if (v >= max) { return max; }
15 return (v+step-1) - ((v+step-1)%step);
16 }
17 };
18
19 int main (int argc, char* argv[])
20 {
21 MinMaxStep<10, 100, 10> mms;
22 unsigned int x = mms.ValidValue (18);
23 std::cout << "value " << x << std::endl;
24
25 return 0;
26 }
'return v <= min? (v + step-1)%step))); –
3つの演算子を持つreturn文が1つ受け入れられました。すべてのメジャーコンパイラ(Clang、Comeau、GCC、ICC、MSVC、SunCC)の承認を受けていますか?それらのうちのいずれかがあなたが認識している半分の焼いた実装を持っていますか? – jww