mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 15:26:11 +01:00
Avoid using std::result_of when std::invoke_result is available
Closes #1934
This commit is contained in:
parent
bed47374ce
commit
ddc9f4c61d
@ -12,6 +12,7 @@
|
|||||||
#define TWOBLUECUBES_CATCH_DETAIL_COMPLETE_INVOKE_HPP_INCLUDED
|
#define TWOBLUECUBES_CATCH_DETAIL_COMPLETE_INVOKE_HPP_INCLUDED
|
||||||
|
|
||||||
#include "../../catch_enforce.h"
|
#include "../../catch_enforce.h"
|
||||||
|
#include "../../catch_meta.hpp"
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@ -42,20 +43,18 @@ namespace Catch {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
template <typename Sig>
|
|
||||||
using ResultOf_t = typename std::result_of<Sig>::type;
|
|
||||||
|
|
||||||
// invoke and not return void :(
|
// invoke and not return void :(
|
||||||
template <typename Fun, typename... Args>
|
template <typename Fun, typename... Args>
|
||||||
CompleteType_t<ResultOf_t<Fun(Args...)>> complete_invoke(Fun&& fun, Args&&... args) {
|
CompleteType_t<FunctionReturnType<Fun(Args...)>> complete_invoke(Fun&& fun, Args&&... args) {
|
||||||
return CompleteInvoker<ResultOf_t<Fun(Args...)>>::invoke(std::forward<Fun>(fun), std::forward<Args>(args)...);
|
return CompleteInvoker<FunctionReturnType<Fun(Args...)>>::invoke(std::forward<Fun>(fun), std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string benchmarkErrorMsg = "a benchmark failed to run successfully";
|
const std::string benchmarkErrorMsg = "a benchmark failed to run successfully";
|
||||||
} // namespace Detail
|
} // namespace Detail
|
||||||
|
|
||||||
template <typename Fun>
|
template <typename Fun>
|
||||||
Detail::CompleteType_t<Detail::ResultOf_t<Fun()>> user_code(Fun&& fun) {
|
Detail::CompleteType_t<FunctionReturnType<Fun()>> user_code(Fun&& fun) {
|
||||||
CATCH_TRY{
|
CATCH_TRY{
|
||||||
return Detail::complete_invoke(std::forward<Fun>(fun));
|
return Detail::complete_invoke(std::forward<Fun>(fun));
|
||||||
} CATCH_CATCH_ALL{
|
} CATCH_CATCH_ALL{
|
||||||
|
@ -26,7 +26,7 @@ namespace Catch {
|
|||||||
int iterations;
|
int iterations;
|
||||||
};
|
};
|
||||||
template <typename Clock, typename Sig>
|
template <typename Clock, typename Sig>
|
||||||
using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<Detail::ResultOf_t<Sig>>>;
|
using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<FunctionReturnType<Sig>>>;
|
||||||
} // namespace Benchmark
|
} // namespace Benchmark
|
||||||
} // namespace Catch
|
} // namespace Catch
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user