[odb-users] odb2.6 gcc16 non-constant condition for static assertion (maybe incomplete type)

MM finjulhich at gmail.com
Sat May 16 16:44:37 EDT 2026


Hello, I will sent a standalone reproducible but does this error stack hint
at anything that can help me towards reducing the problem?

odb -d pgsql --std c++20 --profile boost --generate-query -I/myhome/myproj
-I/usr/include --changelog /myhome/myproj/odb/otp_pgsql.xml
/myhome/myproj/mystuff_live_odb/things.hpp



struct selector {
  std::string ctype;
  uint64_t    cid;
};
using things_t =  std::unordered_map<selector, double>;


#pragma db value(selector) definition
#pragma db member(selector::ctype) column("cype")
#pragma db member(selector::cid) column("cid")

#pragma db object(things_ns) definition table("p")
#pragma db member(things_ns::id) id virtual(std::size_t) column("pid")
#pragma db value(things_ns::things_t) value_column("posn")
#pragma db member(things_ns::things) virtual(things_ns::things_t)


In file included from /usr/include/c++/16/bits/char_traits.h:52,
                 from /usr/include/c++/16/string:45,
                 from <standard-odb-prologue>:7:
/usr/include/c++/16/type_traits: In instantiation of ‘struct
std::is_default_constructible<std::equal_to<myproj::mystuff_ns::selector>
>’:
/usr/include/c++/16/type_traits:191:35:   required by substitution of
‘template<class ... _Bn>
std::__detail::__first_t<std::integral_constant<bool, true>, typename
std::enable_if<(bool)(_Bn::value), void>::type ...>
std::__detail::__and_fn(int) [with _Bn =
{std::is_default_constructible<std::equal_to<myproj::mystuff_ns::selector>
>, std::is_default_constructible<std::hash<myproj::mystuff_ns::selector> >,
std::is_default_constructible<std::allocator<std::pair<const
myproj::mystuff_ns::selector, double> > >}]’
  191 |
__enable_if_t<bool(_Bn::value)>...>;
      |                                                               ^~~~~
/usr/include/c++/16/type_traits:207:42:   required from ‘struct
std::__and_<std::is_default_constructible<std::equal_to<myproj::mystuff_ns::selector>
>, std::is_default_constructible<std::hash<myproj::mystuff_ns::selector> >,
std::is_default_constructible<std::allocator<std::pair<const
myproj::mystuff_ns::selector, double> > > >’
  207 |     : decltype(__detail::__and_fn<_Bn...>(0))
      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/16/bits/hashtable.h:64:11:   required by substitution of
‘template<class _Equal, class _Hash, class _Allocator> using
std::_Hashtable_enable_default_ctor =
std::_Enable_default_constructor<std::__and_<std::is_default_constructible<_Equal>,
std::is_default_constructible<_Dp>,
std::is_default_constructible<_Allocator> >{},
std::__detail::_Hash_node_base> [with _Equal =
std::equal_to<myproj::mystuff_ns::selector>; _Hash =
std::hash<myproj::mystuff_ns::selector>; _Allocator =
std::allocator<std::pair<const myproj::mystuff_ns::selector, double> >]’
   64 |     using _Hashtable_enable_default_ctor
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/16/bits/hashtable.h:189:11:   required from ‘class
std::_Hashtable<myproj::mystuff_ns::selector, std::pair<const
myproj::mystuff_ns::selector, double>, std::allocator<std::pair<const
myproj::mystuff_ns::selector, double> >, std::__detail::_Select1st,
std::equal_to<myproj::mystuff_ns::selector>,
std::hash<myproj::mystuff_ns::selector>, std::__detail::_Mod_range_hashing,
std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy,
std::__detail::_Hashtable_traits<true, false, true> >’
  189 |     class _Hashtable
      |           ^~~~~~~~~~
/usr/include/c++/16/bits/unordered_map.h:115:18:   required from ‘class
std::unordered_map<myproj::mystuff_ns::selector, double>’
  115 |       _Hashtable _M_h;
      |                  ^~~~
/myhome/myproj/mystuff_live_odb/things.hpp:15:12:   required from here
   15 | #pragma db member(things_ns::things) virtual(things_ns::things_t)\
      |            ^~~~~~
/usr/include/c++/16/type_traits:1253:52: error: non-constant condition for
static assertion
 1253 |
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
      |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/16/type_traits:1253: confused by earlier errors, bailing
out


I can't see what is _Tp that the assertion is tying to deterime its type is
complete


this worked fine with odb2.5 and gcc15 c++17

Rds,


More information about the odb-users mailing list