EricWF added inline comments.
================
Comment at: src/any.cpp:18
@@ +17,3 @@
+}
+
+_LIBCPP_END_NAMESPACE_LFTS
----------------
EricWF wrote:
> mclow.lists wrote:
> > Because of arcane packaging issues, we put the exception classes in an
> > unversioned namespace and the destructors in the the dylib as well. See
> > <optional> implementation.
> >
> > _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
> > const char* bad_any_cast::what() const _NOEXCEPT
> > {
> > return "bad any cast";
> > }
> >
> > bad_any_cast::~ bad_any_cast() _NOEXCEPT {}
> > _LIBCPP_END_NAMESPACE_EXPERIMENTAL
> >
> > This will require a change in the header file as well
> I don't think this makes sense for things in the LFTS. Unlike `std::__1`
> which is an implementation detail, the LFTS explicitly puts the exceptions in
> the inline namespace and putting `bad_any_cast` in `std::experimental` is
> non-conforming.
>
> AFAIK there are two reasons we generally put exceptions in namespace `std`
> directly and not `std::__1`
>
> 1. ABI stability. When `std::__1` changes to `std::__2` the exception types
> are still compatible.
> 2. libstdc++ compatibility. libc++'s exceptions should be ABI compatible with
> GCC's when possible.
>
> ABI stability doesn't really make sense when thinking about TS's because they
> are not meant to be stable.
>
> Also If we put `bad_any_cast` outside of `fundamentals_v1` we lose exception
> compatibility with libstdc++.
>
> @mclow.lists: Do you still want to make this change?
libstdc++ actually puts `bad_any_cast` in
`std::experimental::fundamentals_v1::__7` so we aren't going to get libstdc++
compatibility regardless.
http://reviews.llvm.org/D6762
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits