C++14 solve explicit_default_constructor

Akira Takahashi
Akira TakahashiProgrammer en Preferred Networks, Inc.
C++14 LWG.2193
explicitなデフォルトコンストラクタをなくす
高橋 晶(Akira Takahashi)
faithandbrave@longgate.co.jp
2014/06/27(金) WG21 C++14 DISレビュー会議
まえがき
• この資料は、C++14に取り入れられる予定の変更、LWG
(Library Working Group)のIssue 2194のレビューです。
• 2193. Default constructors for standard library
containers are explicit
• http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-
active.html#2193
概要
• explicit Container(Allocator alloc = Allocator());
• となっているデフォルトコンストラクタを、

以下のように分割する:
• Container() : Container(Allocator()) {}
• explicit Container(Allocator alloc);
元々の問題
• 以下のコードが不適格になっていた:
std::set<int> s = {}; // エラー!explicitが付いている
• このコードはClang 3.0でコンパイルエラーになっていた。
• この問題を解決するために、前述した解決策が提示されたが、
実際にはこの問題はEWG (Evolution Working Group)側で
処理された。
• そのためこのIssueでの解決策は、気持ち悪さの解消程度。
変更対象
• basic_string
• deque
• forward_list
• list
• vector
• (multi)map
• (multi)set
• unordered_(multi)map
• unordered_(multi)set
ABIが壊れないか調査した
• オーバーロードの追加は、ABIを壊さない。
• デフォルト引数の追加・削除は、ABIを壊さない。
• よって、この変更はABIを壊さない。
• C++11でstd::vectorのresize()メンバ関数に以下の変更が
入ったが、その変更はABIを壊さなかった。
• void resize(size_type sz, T c = T());
• void resize(size_type sz);
• void resize(size_type sz, const T& c);
参照
• ABI Policy and Guidelines - libstdc++
• http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
• Cxx11AbiCompatibility - GCC Wiki
• http://gcc.gnu.org/wiki/Cxx11AbiCompatibility
• Thiago Macieira: Binary compatibility for library developers
• https://github.com/boostcon/cppnow_presentations_2013/blob/
master/tue/binary_compat_for_cpp_devs.pdf?raw=true
1 de 7

Recomendados

Cost of ovs receiving process por
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving processTakuya ASADA
970 vistas13 diapositivas
ParliamentでGeoSPARQL por
ParliamentでGeoSPARQLParliamentでGeoSPARQL
ParliamentでGeoSPARQLTeppei Inaba
868 vistas11 diapositivas
Distributed processwithapex&amp;flow lowcode por
Distributed processwithapex&amp;flow lowcodeDistributed processwithapex&amp;flow lowcode
Distributed processwithapex&amp;flow lowcodefuruCRM株式会社 CEO/Dreamforce Vietnam Founder
556 vistas6 diapositivas
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク - por
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -次朗 永島
6.2K vistas22 diapositivas
Wpfと非同期 por
Wpfと非同期Wpfと非同期
Wpfと非同期yone64
8.8K vistas20 diapositivas
Kubernetesできること por
KubernetesできることKubernetesできること
KubernetesできることiPride Co., Ltd.
354 vistas14 diapositivas

Más contenido relacionado

Más de Akira Takahashi

Cpp20 overview language features por
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language featuresAkira Takahashi
891 vistas28 diapositivas
Cppmix 02 por
Cppmix 02Cppmix 02
Cppmix 02Akira Takahashi
675 vistas7 diapositivas
Cppmix 01 por
Cppmix 01Cppmix 01
Cppmix 01Akira Takahashi
1K vistas11 diapositivas
Modern C++ Learning por
Modern C++ LearningModern C++ Learning
Modern C++ LearningAkira Takahashi
18.5K vistas12 diapositivas
cpprefjp documentation por
cpprefjp documentationcpprefjp documentation
cpprefjp documentationAkira Takahashi
1.3K vistas23 diapositivas
C++1z draft por
C++1z draftC++1z draft
C++1z draftAkira Takahashi
6.6K vistas67 diapositivas

Más de Akira Takahashi(20)

Cpp20 overview language features por Akira Takahashi
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
Akira Takahashi891 vistas

C++14 solve explicit_default_constructor