1 // 2 // cpp03/query_free.cpp 3 // ~~~~~~~~~~~~~~~~~~~~ 4 // 5 // Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 // 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 // 10 11 #include <boost/asio/query.hpp> 12 #include <cassert> 13 14 struct prop 15 { 16 }; 17 18 struct object 19 { query(const object &,prop)20 friend int query(const object&, prop) { return 123; } 21 }; 22 23 namespace boost { 24 namespace asio { 25 26 template<> 27 struct is_applicable_property<object, prop> 28 { 29 static const bool value = true; 30 }; 31 32 namespace traits { 33 34 template<> 35 struct query_free<object, prop> 36 { 37 static const bool is_valid = true; 38 static const bool is_noexcept = true; 39 typedef int result_type; 40 }; 41 42 } // namespace traits 43 } // namespace asio 44 } // namespace boost 45 main()46int main() 47 { 48 object o1 = {}; 49 int result1 = boost::asio::query(o1, prop()); 50 assert(result1 == 123); 51 (void)result1; 52 53 const object o2 = {}; 54 int result2 = boost::asio::query(o2, prop()); 55 assert(result2 == 123); 56 (void)result2; 57 } 58