[v3 PATCH] Implement P0504R0 (Revisiting in-place tag types for any/optional/variant).

Jonathan Wakely jwakely@redhat.com
Sun Nov 13 22:44:00 GMT 2016


On 13/11/16 21:10 +0000, Jonathan Wakely wrote:
>On 13/11/16 21:02 +0000, Jonathan Wakely wrote:
>>On 12/11/16 21:24 +0200, Ville Voutilainen wrote:
>>>+  inline in_place_t in_place{};
>>>+
>>>+  template<typename _Tp> struct in_place_type_t
>>>+  {
>>>+    explicit in_place_type_t() = default;
>>>+  };
>>>+
>>>+  template<typename _Tp>
>>>+    in_place_type_t<_Tp> in_place_type{};
>>>+
>>>+  template<size_t _Idx> struct in_place_index_t
>>>+  {
>>>+    explicit in_place_index_t() = default;
>>>+  };
>>>+
>>>+  template<size_t _Idx>
>>>+    in_place_index_t<_Idx> in_place_index{};
>>
>>I was told there's a Core issue that says these are not actually
>>inline variables unless they say "inline". Not sure which issue that
>>is, but G++ does the right thing and makes them globally unique,
>>rather than having internal linkage.
>>
>>(At LWG's request P0504R0 marked them inline just to be safe.)
>>
>>OK for trunk, thanks.
>
>Oh, they aren't actually constexpr in your patch, so non-const, and so
>don't get internal linkage. But they *should* be constexpr, please add
>that to all three, and add inline to the two variable templates.
>

P.S. OK with those changes.



More information about the Libstdc++ mailing list