graphics/oidn fails to build with "error: implicit instantiation of undefined template 'std::hash<oidn::DeviceType>'"
Datapanic opened this issue · comments
Platform: FreeBSD_13-2x64 amd64 Poudriere ports builder
Log snippet:
...
[ 50%] Building CXX object core/CMakeFiles/OpenImageDenoise_core.dir/context.cpp.o
cd /wrkdirs/usr/ports/graphics/oidn/work/.build/core && /usr/local/libexec/ccache/c++ -DOIDN_LIBRARY_NAME="OpenImageDenoise" -DOpenImageDenoise_core_EXPORTS -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -I/wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0 -I/wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/external -I/wrkdirs/usr/ports/graphics/oidn/work/.build -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -Wall -Wno-unknown-pragmas -Wno-pass-failed -Wno-unneeded-internal-declaration -fPIC -Wformat -Wformat-security -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DNDEBUG -fstack-protector -D_FORTIFY_SOURCE=2 -std=c++11 -fPIC -pthread -MD -MT core/CMakeFiles/OpenImageDenoise_core.dir/context.cpp.o -MF CMakeFiles/OpenImageDenoise_core.dir/context.cpp.o.d -o CMakeFiles/OpenImageDenoise_core.dir/context.cpp.o -c /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/core/context.cpp
In file included from /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/core/context.cpp:4:
In file included from /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/core/context.h:6:
In file included from /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/core/module.h:6:
In file included from /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/common/common.h:6:
In file included from /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/common/oidn_utils.h:6:
In file included from /wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/include/OpenImageDenoise/oidn.hpp:10:
In file included from /usr/include/c++/v1/algorithm:664:
In file included from /usr/include/c++/v1/__debug:15:
/usr/include/c++/v1/type_traits:1773:38: error: implicit instantiation of undefined template 'std::hashoidn::DeviceType'
: public integral_constant<bool, __is_empty(_Tp)> {};
^
/usr/include/c++/v1/__memory/compressed_pair.h:31:15: note: in instantiation of template class 'std::is_empty<std::hashoidn::DeviceType>' requested here
is_empty<_Tp>::value && !__libcpp_is_final<_Tp>::value>
^
/usr/include/c++/v1/__memory/compressed_pair.h:104:35: note: in instantiation of default argument for '__compressed_pair_elem<std::hashoidn::DeviceType, 1>' required here
private __compressed_pair_elem<_T2, 1> {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/v1/__hash_table:953:59: note: in instantiation of template class 'std::__compressed_pair<unsigned long, std::hashoidn::DeviceType>' requested here
__compressed_pair<size_type, hasher> _p2;
^
/usr/include/c++/v1/unordered_set:502:13: note: in instantiation of template class 'std::__hash_table<oidn::DeviceType, std::hashoidn::DeviceType, std::equal_tooidn::DeviceType, std::allocatoroidn::DeviceType>' requested here
__table _table;
^
/wrkdirs/usr/ports/graphics/oidn/work/oidn-2.3.0/core/context.h:119:36: note: in instantiation of template class 'std::unordered_setoidn::DeviceType' requested here
std::unordered_set initedDeviceTypes;
^
/usr/include/c++/v1/__memory/shared_ptr.h:1552:50: note: template is declared here
template struct _LIBCPP_TEMPLATE_VIS hash;
^
1 error generated.
*** Error code 1
Stop.
...
we are seeing the same build failure on the homebrew side
full build log, https://github.com/Homebrew/homebrew-core/actions/runs/9550658641/job/26327782909
This seems to be caused by a known issue in older libc++ versions, which has been fixed in later versions. I pushed a workaround to devel
: e5e52d3