回答編集履歴

4

fix code

2021/02/08 05:23

投稿

yohhoy
yohhoy

スコア6191

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

2021/02/08 05:23

投稿

yohhoy
yohhoy

スコア6191

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

2021/02/07 05:13

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -10,17 +10,17 @@
10
10
 
11
11
  template<typename... Ts>
12
12
 
13
- constexpr size_t max_sizeof()
13
+ constexpr size_t max_alignof()
14
14
 
15
- { return std::max(sizeof(Ts)...); }
15
+ { return std::max(alignof(Ts)...); }
16
16
 
17
17
 
18
18
 
19
19
  template<typename... Ts>
20
20
 
21
- constexpr size_t max_alignof()
21
+ constexpr size_t max_sizeof()
22
22
 
23
- { return std::max(alignof(Ts)...); }
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_alignof<Derived1, Derived2>();
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

2021/02/07 05:11

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -8,29 +8,19 @@
8
8
 
9
9
  ```c++
10
10
 
11
-
12
-
13
11
  template<typename... Ts>
14
12
 
15
- struct max_sizeof {
13
+ constexpr size_t max_sizeof()
16
14
 
17
- constexpr operator size_t() const
18
-
19
- { return std::max(sizeof(Ts)...); }
15
+ { return std::max(sizeof(Ts)...); }
20
-
21
- };
22
16
 
23
17
 
24
18
 
25
19
  template<typename... Ts>
26
20
 
27
- struct max_alignof {
21
+ constexpr size_t max_alignof()
28
22
 
29
- constexpr operator size_t() const
30
-
31
- { return std::max(alignof(Ts)...); }
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