回答編集履歴
4
fix code
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
constexpr size_t max_alignof()
|
14
14
|
|
15
|
-
{ return std::max(alignof(Ts)...); }
|
15
|
+
{ return std::max({alignof(Ts)...}); }
|
16
16
|
|
17
17
|
|
18
18
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
constexpr size_t max_sizeof()
|
22
22
|
|
23
|
-
{ return std::max(sizeof(Ts)...); }
|
23
|
+
{ return std::max({sizeof(Ts)...}); }
|
24
24
|
|
25
25
|
|
26
26
|
|
3
add link
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
`alignas`/`alignof`+`sizeof`を用いた実装例としては、下記のようなコードになるでしょうか。C++14以降は`std::max`がconstexpr対応していますから、より直接的にアルゴリズムを記述できます。
|
5
|
+
`alignas`/`alignof`+`sizeof`を用いた実装例としては、下記のようなコードになるでしょうか。C++14以降は[`std::max`がconstexpr対応](https://cpprefjp.github.io/reference/algorithm/max.html)していますから、より直接的にアルゴリズムを記述できます。
|
6
6
|
|
7
7
|
|
8
8
|
|
2
fix code
test
CHANGED
@@ -10,17 +10,17 @@
|
|
10
10
|
|
11
11
|
template<typename... Ts>
|
12
12
|
|
13
|
-
constexpr size_t max_
|
13
|
+
constexpr size_t max_alignof()
|
14
14
|
|
15
|
-
{ return std::max(
|
15
|
+
{ return std::max(alignof(Ts)...); }
|
16
16
|
|
17
17
|
|
18
18
|
|
19
19
|
template<typename... Ts>
|
20
20
|
|
21
|
-
constexpr size_t max_
|
21
|
+
constexpr size_t max_sizeof()
|
22
22
|
|
23
|
-
{ return std::max(
|
23
|
+
{ return std::max(sizeof(Ts)...); }
|
24
24
|
|
25
25
|
|
26
26
|
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
constexpr size_t max_align = max_alignof<Derived1, Derived2>();
|
32
32
|
|
33
|
-
constexpr size_t max_size = max_
|
33
|
+
constexpr size_t max_size = max_sizeof<Derived1, Derived2>();
|
34
34
|
|
35
35
|
alignas(max_align) std::byte heap[max_size];
|
36
36
|
|
1
update implementation
test
CHANGED
@@ -8,29 +8,19 @@
|
|
8
8
|
|
9
9
|
```c++
|
10
10
|
|
11
|
-
|
12
|
-
|
13
11
|
template<typename... Ts>
|
14
12
|
|
15
|
-
str
|
13
|
+
constexpr size_t max_sizeof()
|
16
14
|
|
17
|
-
constexpr operator size_t() const
|
18
|
-
|
19
|
-
|
15
|
+
{ return std::max(sizeof(Ts)...); }
|
20
|
-
|
21
|
-
};
|
22
16
|
|
23
17
|
|
24
18
|
|
25
19
|
template<typename... Ts>
|
26
20
|
|
27
|
-
str
|
21
|
+
constexpr size_t max_alignof()
|
28
22
|
|
29
|
-
constexpr operator size_t() const
|
30
|
-
|
31
|
-
|
23
|
+
{ return std::max(alignof(Ts)...); }
|
32
|
-
|
33
|
-
};
|
34
24
|
|
35
25
|
|
36
26
|
|
@@ -38,9 +28,9 @@
|
|
38
28
|
|
39
29
|
{
|
40
30
|
|
41
|
-
constexpr size_t max_align = max_alignof<Derived1, Derived2>
|
31
|
+
constexpr size_t max_align = max_alignof<Derived1, Derived2>();
|
42
32
|
|
43
|
-
constexpr size_t max_size = max_alignof<Derived1, Derived2>
|
33
|
+
constexpr size_t max_size = max_alignof<Derived1, Derived2>();
|
44
34
|
|
45
35
|
alignas(max_align) std::byte heap[max_size];
|
46
36
|
|