On 13/07/16 13:05 +0300, Ville Voutilainen wrote:
Ha, that was indeed in just one place.
See below.
I made the above changes and also made converting assignment operators SFINAE. That SFINAE seems consistent with how constructors and relops work. And yes, there are still some members like emplace that static_assert rather than SFINAE, but I think that's ok for now. operators. Also test that assignment sfinaes.
OK.
diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional index e9a86a4..45929c7 100644 --- a/libstdc++-v3/include/std/optional +++ b/libstdc++-v3/include/std/optional @@ -132,7 +132,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * Practically speaking this detects the presence of such an operator when * called on a const-qualified lvalue (i.e. - * declval<_Tp * const&>().operator&()). + * declval<const _Tp *&>().operator&()). */ template<typename _Tp> struct _Has_addressof
That comment was wrong anyway, it says _Tp* const& when it should have been _Tp const&. declval<_Tp * const&>().operator&() doesn't make any sense. Not sure why I've never spotted that until now. Please change it to const _Tp& and change "i.e." to "e.g." (because since my change last year it detects both members and non-members). OK for trunk with that tweak, thanks. I'll make the same change to the comment in <experimental/optional>.