has_void_return.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <tuple>
  2. #include <utility>
  3. #include <type_traits>
  4. #include <boost/callable_traits/has_void_return.hpp>
  5. #include "test.hpp"
  6. struct foo;
  7. template<typename T>
  8. void assert_void_return() {
  9. CT_ASSERT(has_void_return<T>::value);
  10. }
  11. template<typename T>
  12. void assert_not_void_return() {
  13. CT_ASSERT(!has_void_return<T>::value);
  14. }
  15. int main() {
  16. assert_void_return<void()>();
  17. assert_void_return<void(...)>();
  18. #ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
  19. assert_void_return<void(int) const>();
  20. assert_void_return<void(int) volatile>();
  21. assert_void_return<void(int) const volatile>();
  22. #endif // #ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
  23. assert_void_return<void(foo::*)()>();
  24. assert_void_return<void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(int, ...)>();
  25. assert_void_return<void(foo::*)(int) const>();
  26. assert_void_return<void(foo::*)() volatile>();
  27. assert_void_return<void(foo::*)(int) const volatile>();
  28. assert_void_return<void(*)()>();
  29. assert_void_return<void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC *)(int, ...)>();
  30. assert_void_return<void(&)(int)>();
  31. assert_void_return<void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC &)(...)>();
  32. auto lambda = []{};
  33. assert_void_return<decltype(lambda)>();
  34. assert_not_void_return<void>();
  35. assert_not_void_return<int>();
  36. assert_not_void_return<void*>();
  37. assert_not_void_return<void* foo::*>();
  38. assert_not_void_return<void(** const)()>();
  39. assert_not_void_return<int()>();
  40. assert_not_void_return<int(*)()>();
  41. assert_not_void_return<int(&)()>();
  42. assert_not_void_return<int(foo::*)()>();
  43. assert_not_void_return<int(foo::*)() const>();
  44. assert_not_void_return<int(foo::*)() volatile>();
  45. assert_not_void_return<int(foo::*)() const volatile>();
  46. assert_not_void_return<void(foo::**)()>();
  47. }