EzoeRyou/cpp-intro

033-traits::constructの戻り値について

Opened this issue · 1 comments

"033-vector-implementation"に関してです。
std::string * s = traits::construct( a, p, "hello") ;
と、traits::constructの戻り値を定義していますが、c++ referenceを見るとtraits::constructの戻り値はvoidですし、std::string *sと定義する必要はないのではないでしょうか?

👍 本の表記のままではエラーを得ました。

再現コードは以下です:

#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");
      |                     ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~