[llvm-bugs] [Bug 37407] New: std::invoke fails to call noexcept marked function

via llvm-bugs llvm-bugs at lists.llvm.org
Thu May 10 06:15:46 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=37407

            Bug ID: 37407
           Summary: std::invoke fails to call noexcept marked function
           Product: libc++
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: All Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: blitzrakete at gmail.com
                CC: llvm-bugs at lists.llvm.org, mclow.lists at gmail.com

std::invoke wrongly takes the partial specialization for objects instead for
functions for functions marked with noexcept. I'm on r331914.

#include <functional>

void func() noexcept {}

int main() { std::invoke(func); }

Here's the full error message:

In file included from main.cpp:1:
In file included from /usr/local/bin/../include/c++/v1/functional:484:
/usr/local/bin/../include/c++/v1/type_traits:4196:19: error: invalid
application of 'sizeof' to a function type
    static_assert(sizeof(_Tp) > 0, Type must be complete.);
                  ^~~~~~~~~~~
/usr/local/bin/../include/c++/v1/type_traits:4201:15: note: in instantiation of
template class 'std::__1::__check_complete<void () noexcept>' requested here
    : private __check_complete<_Tp>
              ^
/usr/local/bin/../include/c++/v1/type_traits:4494:15: note: in instantiation of
template class 'std::__1::__check_complete<void (&)() noexcept>' requested here
    : private __check_complete<_Fp>
              ^
/usr/local/bin/../include/c++/v1/type_traits:4557:9: note: in instantiation of
template class 'std::__1::__invokable_r<void, void (&)() noexcept>' requested
here
        __invokable<_Fp, _Args...>::value,
        ^
/usr/local/bin/../include/c++/v1/type_traits:4566:14: note: in instantiation of
template class 'std::__1::__invoke_of<void (&)() noexcept>' requested here
    : public __invoke_of<_Fp, _Args...>
             ^
/usr/local/bin/../include/c++/v1/type_traits:4571:22: note: in instantiation of
template class 'std::__1::result_of<void (&())() noexcept>' requested here
template <class _Tp> using result_of_t = typename result_of<_Tp>::type;
                     ^
/usr/local/bin/../include/c++/v1/functional:2346:1: note: in instantiation of
template type alias 'result_of_t' requested here
result_of_t<_Fn&&(_Args&&...)>
^
main.cpp:5:14: note: while substituting deduced template arguments into
function template 'invoke' [with _Fn = void (&)() noexcept, _Args = <>]
int main() { std::invoke(func); }
             ^
1 error generated.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180510/9656495f/attachment.html>


More information about the llvm-bugs mailing list