Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Step-75: use well-formed deleter #13747

Merged
merged 1 commit into from
May 17, 2022
Merged

Commits on May 17, 2022

  1. Step-75: use well-formed deleter

    LLVM/Clang's libc++ library version 13/14 got stricter by checking
    requirements of the deleter, in particular, according to [1] a deleter
    must pass the requirement `__shared_ptr_deleter_ctor_reqs` which is
    defined as follows:
    ```
    template <class _Dp, class _Pt, class = decltype(declval<_Dp>()(declval<_Pt>()))>
    static true_type __well_formed_deleter_test(int);
    
    template <class, class>
    static false_type __well_formed_deleter_test(...);
    
    template <class _Dp, class _Pt>
    struct __well_formed_deleter : decltype(__well_formed_deleter_test<_Dp, _Pt>(0)) {};
    
    template<class _Dp, class _Tp, class _Yp>
    struct __shared_ptr_deleter_ctor_reqs
    {
        static const bool value = __compatible_with<_Tp, _Yp>::value &&
                                  is_move_constructible<_Dp>::value &&
                                  __well_formed_deleter<_Dp, _Tp*>::value;
    };
    ```
    Unfortunately, our construct
    ```
    coarse_grid_triangulations.emplace_back(
      const_cast<Triangulation<dim> *>(&(dof_handler.get_triangulation())),
      [](auto &) {});
    ```
    does not pass this test. The issue is that the deleter takes a pointer,
    not a reference which, so the lambda `[](auto &){}` does not pass above
    `__shared_ptr_deleter_ctor_reqs`.
    
    While at it, remove the const cast: `coarse_grid_triangulations` is
    declared as a vector holding a `shared_ptr<const Triangulation<dim>>`,
    thus we should simply take the address and not convert to a non-const
    object.
    
    [1] https://github.com/llvm/llvm-project/blob/main/libcxx/include/__memory/shared_ptr.h
    tamiko committed May 17, 2022
    Configuration menu
    Copy the full SHA
    25a27f1 View commit details
    Browse the repository at this point in the history