except: allow void functions in try_func

This commit is contained in:
Danny Robson 2017-09-07 12:48:47 +10:00
parent 8e882fcc5c
commit d2472e229c

View File

@ -36,20 +36,31 @@ namespace cruft::vk {
/// invokes a supplied function with the given arguments and tests
/// that it returns indicating success using try_code.
/// that it indicates success using try_code iff it returns a VkResult,
/// else it returns the result of the function.
///
/// while it would simplify writing this function to avoid
/// non-VkResult functions it simplifies some of the upper layers of
/// try_foo functions to allow them anyway (eg,
/// vkGetBufferMemoryRequirements is otherwise usable with try_query
/// if we ignore the VkResult requirement)
template <
typename FuncT,
typename ...Args
>
static void
static auto
try_func (FuncT &&func, Args &&...args)
{
static_assert(std::is_same_v<
typename func_traits<FuncT>::return_type,
VkResult
>);
try_code (func (std::forward<Args> (args)...));
if constexpr (std::is_same_v<
typename func_traits<FuncT>::return_type,
VkResult
>)
{
try_code (func (std::forward<Args> (args)...));
return;
}
else
return func (std::forward<Args> (args)...);
}