mirror of
https://github.com/boostorg/bind.git
synced 2026-04-13 21:25:59 +02:00
Compare commits
6 Commits
feature/cm
...
feature/cp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8cea63f1c9 | ||
|
|
b601e8924d | ||
|
|
c4fc8e5065 | ||
|
|
ba0ca52695 | ||
|
|
24242b037f | ||
|
|
5340508c16 |
34
.travis.yml
34
.travis.yml
@@ -4,8 +4,6 @@
|
||||
|
||||
language: cpp
|
||||
|
||||
sudo: false
|
||||
|
||||
dist: xenial
|
||||
|
||||
branches:
|
||||
@@ -128,6 +126,17 @@ matrix:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: bionic
|
||||
compiler: g++-10
|
||||
env: TOOLSET=gcc COMPILER=g++-10 CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-10
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
compiler: clang++
|
||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11
|
||||
@@ -264,6 +273,18 @@ matrix:
|
||||
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
|
||||
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||
|
||||
- os: linux
|
||||
compiler: clang++-10
|
||||
env: TOOLSET=clang COMPILER=clang++-10 CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-10
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main'
|
||||
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||
|
||||
- os: linux
|
||||
dist: trusty
|
||||
compiler: clang++-libc++
|
||||
@@ -273,6 +294,15 @@ matrix:
|
||||
packages:
|
||||
- libc++-dev
|
||||
|
||||
- os: linux
|
||||
dist: bionic
|
||||
compiler: clang++-libc++
|
||||
env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libc++-dev
|
||||
|
||||
- os: osx
|
||||
compiler: clang++
|
||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
|
||||
|
||||
@@ -25,7 +25,7 @@ environment:
|
||||
ADDRESS_MODEL: 32,64
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||
TOOLSET: msvc-14.2
|
||||
CXXSTD: 14,17
|
||||
CXXSTD: 14,17,latest
|
||||
ADDRESS_MODEL: 32,64
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
ADDPATH: C:\cygwin\bin;
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <boost/type.hpp>
|
||||
#include <boost/is_placeholder.hpp>
|
||||
#include <boost/bind/arg.hpp>
|
||||
#include <boost/bind/detail/result_traits.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
#include <boost/visit_each.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
@@ -59,29 +60,6 @@ template<class T> class weak_ptr;
|
||||
namespace _bi // implementation details
|
||||
{
|
||||
|
||||
// result_traits
|
||||
|
||||
template<class R, class F> struct result_traits
|
||||
{
|
||||
typedef R type;
|
||||
};
|
||||
|
||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
|
||||
|
||||
struct unspecified {};
|
||||
|
||||
template<class F> struct result_traits<unspecified, F>
|
||||
{
|
||||
typedef typename F::result_type type;
|
||||
};
|
||||
|
||||
template<class F> struct result_traits< unspecified, reference_wrapper<F> >
|
||||
{
|
||||
typedef typename F::result_type type;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// ref_compare
|
||||
|
||||
template<class T> bool ref_compare( T const & a, T const & b, long )
|
||||
|
||||
154
include/boost/bind/detail/result_traits.hpp
Normal file
154
include/boost/bind/detail/result_traits.hpp
Normal file
@@ -0,0 +1,154 @@
|
||||
#ifndef BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED
|
||||
#define BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED
|
||||
|
||||
// MS compatible compilers support #pragma once
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
//
|
||||
// bind/detail/result_traits.hpp
|
||||
//
|
||||
// boost/bind.hpp support header, return type deduction
|
||||
//
|
||||
// Copyright 2006, 2020 Peter Dimov
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt
|
||||
//
|
||||
// See http://www.boost.org/libs/bind/bind.html for documentation.
|
||||
//
|
||||
|
||||
#if defined(_MSVC_LANG) && _MSVC_LANG >= 17
|
||||
#include <functional>
|
||||
#endif
|
||||
|
||||
namespace boost
|
||||
{
|
||||
|
||||
namespace _bi
|
||||
{
|
||||
|
||||
template<class R, class F> struct result_traits
|
||||
{
|
||||
typedef R type;
|
||||
};
|
||||
|
||||
struct unspecified {};
|
||||
|
||||
template<class F> struct result_traits<unspecified, F>
|
||||
{
|
||||
typedef typename F::result_type type;
|
||||
};
|
||||
|
||||
template<class F> struct result_traits< unspecified, reference_wrapper<F> >
|
||||
{
|
||||
typedef typename F::result_type type;
|
||||
};
|
||||
|
||||
#if defined(_MSVC_LANG) && _MSVC_LANG >= 17
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::plus<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::minus<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::multiplies<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::divides<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::modulus<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::negate<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::equal_to<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::not_equal_to<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::greater<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::less<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::greater_equal<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::less_equal<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::logical_and<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::logical_or<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::logical_not<T> >
|
||||
{
|
||||
typedef bool type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::bit_and<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::bit_or<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::bit_xor<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<class T> struct result_traits< unspecified, std::bit_not<T> >
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
} // namespace _bi
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // #ifndef BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED
|
||||
@@ -74,3 +74,4 @@ run bind_noexcept_test.cpp ;
|
||||
run bind_noexcept_mf_test.cpp ;
|
||||
run global_placeholders.cpp ;
|
||||
run mem_fn_noexcept_test.cpp ;
|
||||
run bind_cpp20_test.cpp ;
|
||||
|
||||
42
test/bind_cpp20_test.cpp
Normal file
42
test/bind_cpp20_test.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
// Copyright 2020 Peter Dimov
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#include <boost/bind/bind.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/config/workaround.hpp>
|
||||
#include <functional>
|
||||
|
||||
//
|
||||
|
||||
int main()
|
||||
{
|
||||
BOOST_TEST_EQ( boost::bind( std::plus<int>(), 1, 2 )(), 3 );
|
||||
BOOST_TEST_EQ( boost::bind( std::minus<int>(), 1, 2 )(), -1 );
|
||||
BOOST_TEST_EQ( boost::bind( std::multiplies<int>(), 1, 2 )(), 2 );
|
||||
BOOST_TEST_EQ( boost::bind( std::divides<int>(), 1, 2 )(), 0 );
|
||||
BOOST_TEST_EQ( boost::bind( std::modulus<int>(), 1, 2 )(), 1 );
|
||||
BOOST_TEST_EQ( boost::bind( std::negate<int>(), 1 )(), -1 );
|
||||
|
||||
BOOST_TEST_EQ( boost::bind( std::equal_to<int>(), 1, 2 )(), false );
|
||||
BOOST_TEST_EQ( boost::bind( std::not_equal_to<int>(), 1, 2 )(), true );
|
||||
BOOST_TEST_EQ( boost::bind( std::greater<int>(), 1, 2 )(), false );
|
||||
BOOST_TEST_EQ( boost::bind( std::less<int>(), 1, 2 )(), true );
|
||||
BOOST_TEST_EQ( boost::bind( std::greater_equal<int>(), 1, 2 )(), false );
|
||||
BOOST_TEST_EQ( boost::bind( std::less_equal<int>(), 1, 2 )(), true );
|
||||
|
||||
BOOST_TEST_EQ( boost::bind( std::logical_and<int>(), 1, 2 )(), true );
|
||||
BOOST_TEST_EQ( boost::bind( std::logical_or<int>(), 1, 2 )(), true );
|
||||
BOOST_TEST_EQ( boost::bind( std::logical_not<int>(), 1 )(), false );
|
||||
|
||||
#if !BOOST_WORKAROUND(BOOST_MSVC, < 1600)
|
||||
|
||||
BOOST_TEST_EQ( boost::bind( std::bit_and<int>(), 1, 2 )(), 0 );
|
||||
BOOST_TEST_EQ( boost::bind( std::bit_or<int>(), 1, 2 )(), 3 );
|
||||
BOOST_TEST_EQ( boost::bind( std::bit_xor<int>(), 1, 2 )(), 3 );
|
||||
|
||||
#endif
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
Reference in New Issue
Block a user