c++ - 'va_start' used in function with fixed args error -
my nullpointcheck function:
template<typename t, typename... args> bool __nullpointcheck(t first, args... args) { bool ret = true; va_list vl; auto n = sizeof...(args); va_start(vl, n); (auto = 0; <= n; ++i) { auto p = va_arg(vl, t); if (!p) { ret = false; } } va_end(vl); return ret; } but i'm getting ndk build error follows:
'va_start' used in function fixed args va_start(vl, n); when change second param in va_start first follows:
va_start(vl, first); ndk-build export error follows:
'va_start' used in function fixed args va_start(vl, first); ^ e:/android_home/android-ndk-r10c/toolchains/llvm-3.5/prebuilt/windows-x86_64/bin \..\lib\clang\3.5\include\stdarg.h:33:29: note: expanded macro 'va_start' #define va_start(ap, param) __builtin_va_start(ap, param) there no errors in vs2013, code can's pass ndk-build stage
va_start etc. can used in function prototype ends in ...); . different parameter pack. code uses parameter pack. syntax using parameter packs different syntax variadic functions.
i assuming function should return true if , if arguments non-null pointers. 1 way implement function be:
inline constexpr bool nullpointcheck() { return true; } template<typename t, typename... args> constexpr bool nullpointcheck(t&& first, args&&... args) { return first && nullpointcheck(args...); } rontgen's answer good.
you can use function check if arbitrary argument list true. used universal references copies not made of arguments; makes no difference pointers may make difference more complicated types.
to limit function accept pointers, change t&& t *. (leave args&& is). if want accept literal nullptr need overload:
inline constexpr bool nullpointcheck(std::nullptr_t) { return false; } because nullptr not deduce t *.
Comments
Post a Comment