Build failures with `use of deleted function`
Hi there,
I’m finally giving a go at packaging Paraview 5.10(.1) on Arch Linux. The build runs mostly fine, but fail at some point with:
FAILED: VTKExtensions/Core/CMakeFiles/VTKExtensionsCore.dir/vtkPVStringFormatter.cxx.o
/usr/bin/c++ -DFMT_LOCALE -DFMT_SHARED -DVTKExtensionsCore_EXPORTS -DVTK_MODULE_ENABLE_VTK_FiltersCore=1 -Dkiss_fft_scalar=double -I/build/paraview/src/build/VTKExtensions/Core -I/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core -I/build/paraview/src/build/VTK/Common/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Core -I/build/paraview/src/build/VTK/Common/DataModel -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/DataModel -I/build/paraview/src/build/VTK/Common/Math -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Math -I/build/paraview/src/build/VTK/ThirdParty/kissfft/vtkkissfft -I/build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/kissfft/vtkkissfft -I/build/paraview/src/build/VTK/Common/Transforms -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Transforms -I/build/paraview/src/build/VTK/Common/ExecutionModel -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/ExecutionModel -I/build/paraview/src/build/VTK/IO/XML -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/XML -I/build/paraview/src/build/VTK/IO/XMLParser -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/XMLParser -I/build/paraview/src/build/VTK/IO/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/Core -I/build/paraview/src/build/VTK/ThirdParty/loguru/vtkloguru -I/build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/loguru/vtkloguru -I/build/paraview/src/build/VTK/Parallel/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/Parallel/Core -I/build/paraview/src/build/VTK/Filters/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/Filters/Core -I/build/paraview/src/build/VTK/Common/Misc -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Misc -isystem /build/paraview/src/build/VTK/Utilities/KWIML -isystem /build/paraview/src/ParaView-v5.10.1/VTK/Utilities/KWIML -isystem /build/paraview/src/build/VTK/Utilities/KWSys -isystem /build/paraview/src/ParaView-v5.10.1/VTK/Utilities/KWSys -isystem /build/paraview/src/build/VTK/ThirdParty/kissfft -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/kissfft -isystem /build/paraview/src/build/VTK/ThirdParty/cli11 -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/cli11 -isystem /build/paraview/src/build/VTK/ThirdParty/fmt -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/fmt -isystem /build/paraview/src/build/VTK/ThirdParty/loguru -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/loguru -isystem /build/paraview/src/build/VTK/ThirdParty/pugixml -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/pugixml -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto -O3 -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -MD -MT VTKExtensions/Core/CMakeFiles/VTKExtensionsCore.dir/vtkPVStringFormatter.cxx.o -MF VTKExtensions/Core/CMakeFiles/VTKExtensionsCore.dir/vtkPVStringFormatter.cxx.o.d -o VTKExtensions/Core/CMakeFiles/VTKExtensionsCore.dir/vtkPVStringFormatter.cxx.o -c /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.cxx
In file included from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.cxx:15:
/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h: In copy constructor ‘vtkPVStringFormatter::vtkArgumentScope::vtkArgumentScope(const vtkPVStringFormatter::vtkArgumentScope&)’:
/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:153:9: error: use of deleted function ‘fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >::dynamic_format_arg_store(const fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >&)’
153 | : Args(args.Args)
| ^~~~~~~~~~~~~~~
In file included from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:38,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.cxx:15:
/usr/include/fmt/args.h:74:7: note: ‘fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >::dynamic_format_arg_store(const fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >&)’ is implicitly deleted because the default definition would be ill-formed:
74 | class dynamic_format_arg_store
| ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/fmt/args.h:74:7: error: use of deleted function ‘fmt::v8::detail::dynamic_arg_list::dynamic_arg_list(const fmt::v8::detail::dynamic_arg_list&)’
/usr/include/fmt/args.h:30:7: note: ‘fmt::v8::detail::dynamic_arg_list::dynamic_arg_list(const fmt::v8::detail::dynamic_arg_list&)’ is implicitly deleted because the default definition would be ill-formed:
30 | class dynamic_arg_list {
| ^~~~~~~~~~~~~~~~
/usr/include/fmt/args.h:30:7: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = fmt::v8::detail::dynamic_arg_list::node<>; _Dp = std::default_delete<fmt::v8::detail::dynamic_arg_list::node<> >]’
In file included from /usr/include/c++/11.2.0/bits/locale_conv.h:41,
from /usr/include/c++/11.2.0/locale:43,
from /usr/include/c++/11.2.0/iomanip:43,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkIOStream.h:30,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkSystemIncludes.h:39,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkIndent.h:28,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkObjectBase.h:53,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkLogger.h:153,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:28,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.cxx:15:
/usr/include/c++/11.2.0/bits/unique_ptr.h:468:7: note: declared here
468 | unique_ptr(const unique_ptr&) = delete;
| ^~~~~~~~~~
My first idea was to check for some eventually unreleased changes to that file. And there is one. Backporting that entire commit didn’t apply, so I’ve tried backporting only that file (not really knowing what I’m doing by that though ^^), patch below:
diff --git a/VTKExtensions/Core/vtkPVStringFormatter.h b/VTKExtensions/Core/vtkPVStringFormatter.h
index 4df04389fc..c9d21dd334 100644
--- a/VTKExtensions/Core/vtkPVStringFormatter.h
+++ b/VTKExtensions/Core/vtkPVStringFormatter.h
@@ -149,11 +149,7 @@ private:
public:
vtkArgumentScope() = default;
- vtkArgumentScope(const vtkArgumentScope& args)
- : Args(args.Args)
- , ArgNames(args.ArgNames)
- {
- }
+ vtkArgumentScope(const vtkArgumentScope& args) = default;
/**
* Adds an named argument as an fmt::arg() object.
But then the compilation failed later on:
FAILED: VTKExtensions/Misc/CMakeFiles/VTKExtensionsMisc.dir/vtkEnvironmentAnnotationFilter.cxx.o
/usr/bin/c++ -DFMT_LOCALE -DFMT_SHARED -DVTKExtensionsMisc_EXPORTS -Dkiss_fft_scalar=double -I/build/paraview/src/build/VTKExtensions/Misc -I/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc -I/build/paraview/src/build/VTK/Common/DataModel -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/DataModel -I/build/paraview/src/build/VTK/Common/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Core -I/build/paraview/src/build/VTK/Common/Math -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Math -I/build/paraview/src/build/VTK/ThirdParty/kissfft/vtkkissfft -I/build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/kissfft/vtkkissfft -I/build/paraview/src/build/VTK/Common/Transforms -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Transforms -I/build/paraview/src/build/VTK/Common/ExecutionModel -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/ExecutionModel -I/build/paraview/src/build/Remoting/ClientServerStream -I/build/paraview/src/ParaView-v5.10.1/Remoting/ClientServerStream -I/build/paraview/src/build/Remoting/Core -I/build/paraview/src/ParaView-v5.10.1/Remoting/Core -I/build/paraview/src/build/VTKExtensions/Core -I/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core -I/build/paraview/src/build/VTK/IO/XML -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/XML -I/build/paraview/src/build/VTK/IO/XMLParser -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/XMLParser -I/build/paraview/src/build/VTK/Common/Misc -I/build/paraview/src/ParaView-v5.10.1/VTK/Common/Misc -I/build/paraview/src/build/VTK/Parallel/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/Parallel/Core -I/build/paraview/src/build/VTK/Filters/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/Filters/Core -I/build/paraview/src/build/VTK/IO/Legacy -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/Legacy -I/build/paraview/src/build/VTK/IO/Core -I/build/paraview/src/ParaView-v5.10.1/VTK/IO/Core -isystem /build/paraview/src/build/VTK/Utilities/KWIML -isystem /build/paraview/src/ParaView-v5.10.1/VTK/Utilities/KWIML -isystem /build/paraview/src/build/VTK/Utilities/KWSys -isystem /build/paraview/src/ParaView-v5.10.1/VTK/Utilities/KWSys -isystem /build/paraview/src/build/VTK/ThirdParty/kissfft -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/kissfft -isystem /build/paraview/src/build/VTK/ThirdParty/cli11 -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/cli11 -isystem /build/paraview/src/build/VTK/ThirdParty/fmt -isystem /build/paraview/src/ParaView-v5.10.1/VTK/ThirdParty/fmt -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto -O3 -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -MD -MT VTKExtensions/Misc/CMakeFiles/VTKExtensionsMisc.dir/vtkEnvironmentAnnotationFilter.cxx.o -MF VTKExtensions/Misc/CMakeFiles/VTKExtensionsMisc.dir/vtkEnvironmentAnnotationFilter.cxx.o.d -o VTKExtensions/Misc/CMakeFiles/VTKExtensionsMisc.dir/vtkEnvironmentAnnotationFilter.cxx.o -c /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.cxx
In file included from /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
from /usr/include/c++/11.2.0/bits/allocator.h:46,
from /usr/include/c++/11.2.0/string:41,
from /usr/include/c++/11.2.0/bits/locale_classes.h:40,
from /usr/include/c++/11.2.0/bits/ios_base.h:41,
from /usr/include/c++/11.2.0/ios:42,
from /usr/include/c++/11.2.0/istream:38,
from /usr/include/c++/11.2.0/fstream:38,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkIOStream.h:29,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkSystemIncludes.h:39,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkIndent.h:28,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkObjectBase.h:53,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkObject.h:45,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkVersion.h:31,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkDeprecation.h:25,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/ExecutionModel/vtkAlgorithm.h:36,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/ExecutionModel/vtkTableAlgorithm.h:42,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.h:35,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.cxx:15:
/usr/include/c++/11.2.0/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = vtkPVStringFormatter::vtkArgumentScope; _Args = {vtkPVStringFormatter::vtkArgumentScope&}; _Tp = vtkPVStringFormatter::vtkArgumentScope]’:
/usr/include/c++/11.2.0/bits/alloc_traits.h:512:17: required from ‘static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = vtkPVStringFormatter::vtkArgumentScope; _Args = {vtkPVStringFormatter::vtkArgumentScope&}; _Tp = vtkPVStringFormatter::vtkArgumentScope; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<vtkPVStringFormatter::vtkArgumentScope>]’
/usr/include/c++/11.2.0/bits/shared_ptr_base.h:519:39: required from ‘std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_Sp_counted_ptr_inplace(_Alloc, _Args&& ...) [with _Args = {vtkPVStringFormatter::vtkArgumentScope&}; _Tp = vtkPVStringFormatter::vtkArgumentScope; _Alloc = std::allocator<vtkPVStringFormatter::vtkArgumentScope>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’
/usr/include/c++/11.2.0/bits/shared_ptr_base.h:650:16: required from ‘std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = vtkPVStringFormatter::vtkArgumentScope; _Alloc = std::allocator<vtkPVStringFormatter::vtkArgumentScope>; _Args = {vtkPVStringFormatter::vtkArgumentScope&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’
/usr/include/c++/11.2.0/bits/shared_ptr_base.h:1342:14: required from ‘std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<vtkPVStringFormatter::vtkArgumentScope>; _Args = {vtkPVStringFormatter::vtkArgumentScope&}; _Tp = vtkPVStringFormatter::vtkArgumentScope; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’
/usr/include/c++/11.2.0/bits/shared_ptr.h:409:59: required from ‘std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<vtkPVStringFormatter::vtkArgumentScope>; _Args = {vtkPVStringFormatter::vtkArgumentScope&}; _Tp = vtkPVStringFormatter::vtkArgumentScope]’
/usr/include/c++/11.2.0/bits/shared_ptr.h:862:14: required from ‘std::shared_ptr<_Tp> std::allocate_shared(const _Alloc&, _Args&& ...) [with _Tp = vtkPVStringFormatter::vtkArgumentScope; _Alloc = std::allocator<vtkPVStringFormatter::vtkArgumentScope>; _Args = {vtkPVStringFormatter::vtkArgumentScope&}]’
/usr/include/c++/11.2.0/bits/shared_ptr.h:878:39: required from ‘std::shared_ptr<_Tp> std::make_shared(_Args&& ...) [with _Tp = vtkPVStringFormatter::vtkArgumentScope; _Args = {vtkPVStringFormatter::vtkArgumentScope&}]’
/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:88:52: required from ‘static void vtkPVStringFormatter::PushScope(Args&& ...) [with Args = {fmt::v8::detail::named_arg<char, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >}]’
/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.cxx:73:38: required from here
/usr/include/c++/11.2.0/ext/new_allocator.h:162:11: error: use of deleted function ‘vtkPVStringFormatter::vtkArgumentScope::vtkArgumentScope(const vtkPVStringFormatter::vtkArgumentScope&)’
162 | { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.cxx:21:
/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:152:5: note: ‘vtkPVStringFormatter::vtkArgumentScope::vtkArgumentScope(const vtkPVStringFormatter::vtkArgumentScope&)’ is implicitly deleted because the default definition would be ill-formed:
152 | vtkArgumentScope(const vtkArgumentScope& args) = default;
| ^~~~~~~~~~~~~~~~
/build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:152:5: error: use of deleted function ‘fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >::dynamic_format_arg_store(const fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >&)’
In file included from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Core/vtkPVStringFormatter.h:38,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.cxx:21:
/usr/include/fmt/args.h:74:7: note: ‘fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >::dynamic_format_arg_store(const fmt::v8::dynamic_format_arg_store<fmt::v8::basic_format_context<fmt::v8::appender, char> >&)’ is implicitly deleted because the default definition would be ill-formed:
74 | class dynamic_format_arg_store
| ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/fmt/args.h:74:7: error: use of deleted function ‘fmt::v8::detail::dynamic_arg_list::dynamic_arg_list(const fmt::v8::detail::dynamic_arg_list&)’
/usr/include/fmt/args.h:30:7: note: ‘fmt::v8::detail::dynamic_arg_list::dynamic_arg_list(const fmt::v8::detail::dynamic_arg_list&)’ is implicitly deleted because the default definition would be ill-formed:
30 | class dynamic_arg_list {
| ^~~~~~~~~~~~~~~~
/usr/include/fmt/args.h:30:7: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = fmt::v8::detail::dynamic_arg_list::node<>; _Dp = std::default_delete<fmt::v8::detail::dynamic_arg_list::node<> >]’
In file included from /usr/include/c++/11.2.0/bits/locale_conv.h:41,
from /usr/include/c++/11.2.0/locale:43,
from /usr/include/c++/11.2.0/iomanip:43,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkIOStream.h:30,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkSystemIncludes.h:39,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkIndent.h:28,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkObjectBase.h:53,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkObject.h:45,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkVersion.h:31,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/Core/vtkDeprecation.h:25,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/ExecutionModel/vtkAlgorithm.h:36,
from /build/paraview/src/ParaView-v5.10.1/VTK/Common/ExecutionModel/vtkTableAlgorithm.h:42,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.h:35,
from /build/paraview/src/ParaView-v5.10.1/VTKExtensions/Misc/vtkEnvironmentAnnotationFilter.cxx:15:
/usr/include/c++/11.2.0/bits/unique_ptr.h:468:7: note: declared here
468 | unique_ptr(const unique_ptr&) = delete;
| ^~~~~~~~~~
And this time no luck there, has been no changes to that file. So I’m stuck, but the issue might be more general than I thought. Maybe something fmt related?