033-traits::constructの戻り値について
ame24924 opened this issue · 1 comments
ame24924 commented
"033-vector-implementation"に関してです。
std::string * s = traits::construct( a, p, "hello") ;
と、traits::constructの戻り値を定義していますが、c++ referenceを見るとtraits::constructの戻り値はvoidですし、std::string *s
と定義する必要はないのではないでしょうか?
sylph01 commented
👍 本の表記のままではエラーを得ました。
再現コードは以下です:
#include "../all.h"
int main(){
std::allocator<std::string> a;
using traits = std::allocator_traits<decltype(a)>;
std::string * p = traits::allocate(a, 1);
std::string * s = traits::construct(a, p, "hello");
// traits::construct(a, p, "hello");
// std::cout << *p << std::endl;
traits::destroy(a, s);
//traits::destroy(a, p);
traits::deallocate(a, p, 1);
}
エラーメッセージは以下:
$ g++ -std=c++17 -Wall -pedantic-errors allocator_traits_.cpp
allocator_traits_.cpp: In function ‘int main()’:
allocator_traits_.cpp:7:38: error: void value not ignored as it ought to be
7 | std::string * s = traits::construct(a, p, "hello");
| ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~