is_mutex_type<recursive_mutex> is false if BOOST_NO_CXX11_SFINAE_EXPR is defined

Open
#370 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
45/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
cpp
Domain
backend

Research direction

Start in include/boost/thread/lockable_traits.hpp around lines 143-146 and compare the old has_member_try_lock implementation with the working version introduced by commit a35ffa3a83e6f74262d66feac66ef5b513c99745. Check the BOOST_NO_CXX11_NOEXCEPT guard and verify that is_mutex_type<recursive_mutex> is true when BOOST_NO_CXX11_SFINAE_EXPR is defined.

Written by the indexing model from the issue text.

Description

This part of the old has_member_try_lock implementation fails to match recursive_mutex::try_lock() because it's noexcept:

https://github.com/boostorg/thread/blob/4abafccff4bdeb4b5ac516ff0c2bc7c0dad8bafb/include/boost/thread/lockable_traits.hpp#L143-L146

The bug is still there in the current code, but hidden by a35ffa3a83e6f74262d66feac66ef5b513c99745 which has a working version that is used by most compilers since Boost 1.69.0

A fix would be to add another partial specialization for noexcept functions:

#ifndef BOOST_NO_CXX11_NOEXCEPT
        template<typename U>
        static true_type has_member(bool (U::*)() noexcept);
#endif
Dominant language
C++
Stars
213
Forks
171
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from boostorg/thread

All issues in boostorg/thread

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.