diff --git a/CMakeLists.txt b/CMakeLists.txt
index b45b0b3..9e70d58 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,7 +25,6 @@ target_link_libraries(boost_property_map
Boost::smart_ptr
Boost::throw_exception
Boost::type_traits
- Boost::utility
)
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
diff --git a/build.jam b/build.jam
index 33aa7e4..c472277 100644
--- a/build.jam
+++ b/build.jam
@@ -17,8 +17,7 @@ constant boost_dependencies :
/boost/smart_ptr//boost_smart_ptr
/boost/throw_exception//boost_throw_exception
/boost/type_index//boost_type_index
- /boost/type_traits//boost_type_traits
- /boost/utility//boost_utility ;
+ /boost/type_traits//boost_type_traits ;
project /boost/property_map
: common-requirements
diff --git a/doc/function_property_map.html b/doc/function_property_map.html
index 4ab68b5..fff6b2f 100644
--- a/doc/function_property_map.html
+++ b/doc/function_property_map.html
@@ -68,7 +68,7 @@
Template Parameters
| Ref |
The result type of the function. |
-boost::result_of<const UnaryFunction(const Key&)>::type |
+decltype(std::declval<const UnaryFunction>()(std::declval<const Key&>())) |
diff --git a/doc/transform_value_property_map.html b/doc/transform_value_property_map.html
index ea4e7c0..39c7b7f 100644
--- a/doc/transform_value_property_map.html
+++ b/doc/transform_value_property_map.html
@@ -68,7 +68,7 @@ Template Parameters
| Ref |
The result type of the function. |
-boost::result_of<const UnaryFunction(property_traits<PM>::reference)>::type |
+decltype(std::declval<const UnaryFunction>()(std::declval<property_traits<PM>::reference>())) |
diff --git a/include/boost/property_map/function_property_map.hpp b/include/boost/property_map/function_property_map.hpp
index 5ce1cbf..6c03d53 100644
--- a/include/boost/property_map/function_property_map.hpp
+++ b/include/boost/property_map/function_property_map.hpp
@@ -3,6 +3,7 @@
// Author: Philipp Moeller
//
// Copyright 2012, Philipp Moeller
+// Copyright 2026, Arnaud Becheler
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -16,13 +17,23 @@
#include
#include
#include
-#include
#include
#include
namespace boost {
-template::type>
+namespace detail {
+
+// MSVC in permissive mode cannot evaluate a bare decltype default template argument
+template
+struct function_property_map_result
+{
+ using type = decltype(std::declval()(std::declval()));
+};
+
+} // namespace detail
+
+template::type>
class function_property_map: public put_get_helper > {
public:
typedef Key key_type;
diff --git a/include/boost/property_map/transform_value_property_map.hpp b/include/boost/property_map/transform_value_property_map.hpp
index d8673c3..c503c99 100644
--- a/include/boost/property_map/transform_value_property_map.hpp
+++ b/include/boost/property_map/transform_value_property_map.hpp
@@ -3,6 +3,7 @@
// Author: Philipp Moeller
//
// Copyright 2012, Philipp Moeller
+// Copyright 2026, Arnaud Becheler
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -16,13 +17,23 @@
#include
#include
#include
-#include
#include
#include
namespace boost {
-template::reference)>::type>
+namespace detail {
+
+// MSVC in permissive mode cannot evaluate a bare decltype default template argument
+template
+struct transform_value_property_map_result
+{
+ using type = decltype(std::declval()(std::declval::reference>()));
+};
+
+} // namespace detail
+
+template::type>
class transform_value_property_map: public put_get_helper > {
public:
typedef typename property_traits::key_type key_type;