potswa / cxx_function

Prototype for new std::function features, compatible with C++11.
MIT License
46 stars 7 forks source link

fails to compile on newer gcc #13

Closed user706 closed 6 years ago

user706 commented 6 years ago

Hi,

on newer compilers, cxx_function fails to compile.

See e.g. https://wandbox.org/permlink/9xxy5Ny6X6ZeUmxI (scroll down, to see the compile output) (On the top left you'll find a window where you can select various gcc and clang compiler versions. With gcc, it only works with 6.3.0 or lower...)

In file included from prog.cc:20:
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:75:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:5: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:5: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
     ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:5: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
     ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: error: 'is_nothrow_callable' is not a member of 'std'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:39: note: suggested alternative: 'is_nothrow_swappable'
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                       ^~~~~~~~~~~~~~~~~~~
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:90: error: template argument 1 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                          ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: expected '(' before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:99: error: template argument 3 is invalid
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                   ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
cxx_function.hpp:511:107: error: expected unqualified-id before '>' token
         typename std::enable_if< std::is_nothrow_callable< t TYPE_QUALS ( arg ... ), ret >::value >::type > \
                                                                                                           ^
cxx_function.hpp:66:43: note: in expansion of macro 'NOEXCEPT_CASE'
     MACRO( TYPE_QUALS, FN_QUALS, UNSAFE ) MACRO( const TYPE_QUALS, const FN_QUALS, IGNORE )
                                           ^~~~~
cxx_function.hpp:68:56: note: in expansion of macro 'DISPATCH_CQ'
     DISPATCH_CQ( MACRO, UNSAFE, TYPE_QUALS, FN_QUALS ) DISPATCH_CQ( MACRO, IGNORE, volatile TYPE_QUALS, volatile FN_QUALS )
                                                        ^~~~~~~~~~~
cxx_function.hpp:72:60: note: in expansion of macro 'DISPATCH_CV'
     DISPATCH_CV( MACRO, IGNORE, & TYPE_QUALS, & FN_QUALS ) DISPATCH_CV( MACRO, IGNORE, && TYPE_QUALS, && FN_QUALS )
                                                            ^~~~~~~~~~~
cxx_function.hpp:75:58: note: in expansion of macro 'DISPATCH_CVREFQ'
     DISPATCH_CV( MACRO, UNSAFE, & TYPE_QUALS, FN_QUALS ) DISPATCH_CVREFQ( MACRO, TYPE_QUALS, FN_QUALS )
                                                          ^~~~~~~~~~~~~~~
cxx_function.hpp:513:5: note: in expansion of macro 'DISPATCH_CVOBJQ'
     DISPATCH_CVOBJQ( NOEXCEPT_CASE, IGNORE, , )
     ^~~~~~~~~~~~~~~
potswa commented 6 years ago

Ugh, they renamed is_nothrow_callable to is_nothrow_invocable after it was already widely implemented.

(See also: a dictionary.)

potswa commented 6 years ago

How am I even going to support newer compilers without breaking older ones that have the feature macro and old naming?

user706 commented 6 years ago

How am I even going to support newer compilers without breaking older ones that have the feature macro and old naming?

hmmm... maby some macro can be used? (http://en.cppreference.com/w/cpp/preprocessor/replace#Predefined_macros)

potswa commented 6 years ago

Fixed by 1545517

potswa commented 6 years ago

@user706 Yeah, I did so for GCC following your Wandbox experimentation, but I haven't tried collecting more compatibility data. More reports are welcome.

user706 commented 6 years ago

quick fix ;) thanks