-
Notifications
You must be signed in to change notification settings - Fork 216
Closed
Labels
Description
Compiling the following code with the latest GCC or Clang, there will be compiler warnings. MSVC won't generate a warning.
#include <cstdio>
#include "proxy.h"
struct MyTrivialFacade : pro::facade_builder
::add_convention<pro::operator_dispatch<"()">, void(), void() const>
::support_copy<pro::constraint_level::trivial>
::support_relocation<pro::constraint_level::trivial>
::support_destruction<pro::constraint_level::trivial>
::build {};
int main() {
pro::proxy<MyTrivialFacade> p = pro::make_proxy<MyTrivialFacade>([] { puts("lalala"); });
(*p)();
}Warning from GCC:
In file included from /usr/include/unistd.h:226,
from /opt/compiler-explorer/gcc-trunk-20241205/include/c++/15.0.0/bits/atomic_wait.h:48,
from /opt/compiler-explorer/gcc-trunk-20241205/include/c++/15.0.0/bits/atomic_base.h:43,
from /opt/compiler-explorer/gcc-trunk-20241205/include/c++/15.0.0/bits/shared_ptr_atomic.h:33,
from /opt/compiler-explorer/gcc-trunk-20241205/include/c++/15.0.0/memory:83,
from /app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:13,
from <source>:3:
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h: In instantiation of 'static pro::details::add_qualifier_t<pro::proxy<F>, Q> pro::details::proxy_helper<F>::access(pro::details::add_qualifier_t<A, Q>) [with A = pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>, void()>; pro::details::qualifier_type Q = pro::details::qualifier_type::lv; F = MyTrivialFacade; pro::details::add_qualifier_t<pro::proxy<F>, Q> = pro::proxy<MyTrivialFacade>&; pro::details::add_qualifier_t<A, Q> = pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>, void()>&]':
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:922:38: required from 'pro::proxy<F>& pro::access_proxy(A&) [with F = MyTrivialFacade; A = operator_dispatch<details::sign<3>{"()"}, false>::accessor<MyTrivialFacade, details::conv_impl<false, operator_dispatch<details::sign<3>{"()"}, false>, void(), void() const>, void()>]'
921 | return details::proxy_helper<F>::template access<
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
922 | A, details::qualifier_type::lv>(a);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:3: required from 'R pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<F, C, R(Args ...)>::operator()(Args ...) [with F = MyTrivialFacade; C = pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>; R = void; Args = {}]'
1436 | access_proxy<F>(SELF), std::forward<Args>(args)...); \
| ~~~~~~~~~~~~~~~^~~~~~
<source>:14:7: required from here
14 | (*p)();
| ~~~~^~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:663:54: warning: 'offsetof' within non-standard-layout type 'pro::proxy<MyTrivialFacade>' is conditionally-supported [-Winvalid-offsetof]
663 | std::addressof(a))) - offsetof(proxy<F>, ia_)));
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h: In instantiation of 'static pro::details::add_qualifier_t<pro::proxy<F>, Q> pro::details::proxy_helper<F>::access(pro::details::add_qualifier_t<A, Q>) [with A = pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>, void() const>; pro::details::qualifier_type Q = pro::details::qualifier_type::const_lv; F = MyTrivialFacade; pro::details::add_qualifier_t<pro::proxy<F>, Q> = const pro::proxy<MyTrivialFacade>&; pro::details::add_qualifier_t<A, Q> = const pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>, void() const>&]':
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:927:44: required from 'const pro::proxy<F>& pro::access_proxy(const A&) [with F = MyTrivialFacade; A = operator_dispatch<details::sign<3>{"()"}, false>::accessor<MyTrivialFacade, details::conv_impl<false, operator_dispatch<details::sign<3>{"()"}, false>, void(), void() const>, void() const>]'
926 | return details::proxy_helper<F>::template access<
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
927 | A, details::qualifier_type::const_lv>(a);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:3: required from 'R pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<F, C, R(Args ...) const>::operator()(Args ...) const [with F = MyTrivialFacade; C = pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>; R = void; Args = {}]'
1436 | access_proxy<F>(SELF), std::forward<Args>(args)...); \
| ~~~~~~~~~~~~~~~^~~~~~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:3: required from 'pro::operator_dispatch<pro::details::sign<3>{"()"}, false>::accessor<F, C, R(Args ...) const>::accessor() [with F = MyTrivialFacade; C = pro::details::conv_impl<false, pro::operator_dispatch<pro::details::sign<3>{"()"}, false>, void(), void() const>; R = void; Args = {}]'
1183 | accessor() noexcept { ::std::ignore = &accessor::__VA_ARGS__; }
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:3: required from 'pro::proxy<F>::proxy() [with F = MyTrivialFacade]'
1137 | struct accessor<__F, __C, __Os...> : accessor<__F, __C, __Os>... \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:743:61: required from 'pro::proxy<F>::proxy(std::in_place_type_t<P>, Args&& ...) requires is_constructible_v<P, Args ...> [with P = pro::details::inplace_ptr<main()::<lambda()> >; Args = {main()::<lambda()>}; F = MyTrivialFacade]'
743 | requires(std::is_constructible_v<P, Args...>) : proxy()
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1064:36: required from 'pro::proxy<F> pro::details::make_proxy_impl(Args&& ...) [with F = MyTrivialFacade; T = main()::<lambda()>; Args = {main()::<lambda()>}]'
1064 | std::forward<Args>(args)...};
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1123:54: required from 'pro::proxy<F> pro::make_proxy(T&&) [with F = MyTrivialFacade; T = main()::<lambda()>]'
1123 | return details::make_proxy_impl<F, std::decay_t<T>>(std::forward<T>(value));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
<source>:13:67: required from here
13 | pro::proxy<MyTrivialFacade> p = pro::make_proxy<MyTrivialFacade>([] { puts("lalala"); });
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:663:54: warning: 'offsetof' within non-standard-layout type 'pro::proxy<MyTrivialFacade>' is conditionally-supported [-Winvalid-offsetof]
663 | std::addressof(a))) - offsetof(proxy<F>, ia_)));
| ^
Warning from Clang:
In file included from <source>:3:
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:663:45: warning: offset of on non-standard-layout type 'proxy<MyTrivialFacade>' [-Winvalid-offsetof]
663 | std::addressof(a))) - offsetof(proxy<F>, ia_)));
| ^ ~~~
/opt/compiler-explorer/clang-19.1.0/lib/clang/19/include/__stddef_offsetof.h:16:24: note: expanded from macro 'offsetof'
16 | #define offsetof(t, d) __builtin_offsetof(t, d)
| ^ ~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:926:45: note: in instantiation of function template specialization 'pro::details::proxy_helper<MyTrivialFacade>::access<pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void () const>, pro::details::qualifier_type::const_lv>' requested here
926 | return details::proxy_helper<F>::template access<
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:36: note: in instantiation of function template specialization 'pro::access_proxy<MyTrivialFacade, pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void () const>>' requested here
1611 | ___PRO_DEF_MEM_ACCESSOR_TEMPLATE(___PRO_DEF_LHS_ANY_OP_ACCESSOR, operator())
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:68: note: in instantiation of member function 'pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void () const>::operator()' requested here
1611 | ___PRO_DEF_MEM_ACCESSOR_TEMPLATE(___PRO_DEF_LHS_ANY_OP_ACCESSOR, operator())
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:3: note: in instantiation of member function 'pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void () const>::accessor' requested here
1611 | ___PRO_DEF_MEM_ACCESSOR_TEMPLATE(___PRO_DEF_LHS_ANY_OP_ACCESSOR, operator())
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1137:12: note: expanded from macro '___PRO_DEF_MEM_ACCESSOR_TEMPLATE'
1137 | struct accessor<__F, __C, __Os...> : accessor<__F, __C, __Os>... \
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:743:55: note: in instantiation of member function 'pro::proxy<MyTrivialFacade>::proxy' requested here
743 | requires(std::is_constructible_v<P, Args...>) : proxy()
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1063:12: note: in instantiation of function template specialization 'pro::proxy<MyTrivialFacade>::proxy<pro::details::inplace_ptr<(lambda at <source>:13:68)>, (lambda at <source>:13:68)>' requested here
1063 | return proxy<F>{std::in_place_type<inplace_ptr<T>>,
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1123:19: note: in instantiation of function template specialization 'pro::details::make_proxy_impl<MyTrivialFacade, (lambda at <source>:13:68), (lambda at <source>:13:68)>' requested here
1123 | return details::make_proxy_impl<F, std::decay_t<T>>(std::forward<T>(value));
| ^
<source>:13:40: note: in instantiation of function template specialization 'pro::make_proxy<MyTrivialFacade, (lambda at <source>:13:68)>' requested here
13 | pro::proxy<MyTrivialFacade> p = pro::make_proxy<MyTrivialFacade>([] { puts("lalala"); });
| ^
In file included from <source>:3:
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:663:45: warning: offset of on non-standard-layout type 'proxy<MyTrivialFacade>' [-Winvalid-offsetof]
663 | std::addressof(a))) - offsetof(proxy<F>, ia_)));
| ^ ~~~
/opt/compiler-explorer/clang-19.1.0/lib/clang/19/include/__stddef_offsetof.h:16:24: note: expanded from macro 'offsetof'
16 | #define offsetof(t, d) __builtin_offsetof(t, d)
| ^ ~
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:921:45: note: in instantiation of function template specialization 'pro::details::proxy_helper<MyTrivialFacade>::access<pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void ()>, pro::details::qualifier_type::lv>' requested here
921 | return details::proxy_helper<F>::template access<
| ^
/app/raw.githubusercontent.com/microsoft/proxy/refs/heads/main/proxy.h:1611:36: note: in instantiation of function template specialization 'pro::access_proxy<MyTrivialFacade, pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void ()>>' requested here
1611 | ___PRO_DEF_MEM_ACCESSOR_TEMPLATE(___PRO_DEF_LHS_ANY_OP_ACCESSOR, operator())
| ^
<source>:14:7: note: in instantiation of member function 'pro::operator_dispatch<details::sign<3UL>{"()"}>::accessor<MyTrivialFacade, pro::details::conv_impl<false, pro::operator_dispatch<"()", false>, void (), void () const>, void ()>::operator()' requested here
14 | (*p)();
| ^
2 warnings generated.