Warning: dereferencing type-punned pointer will break strict-aliasing rules, when moving to c++17
Hey I feel super stupid, because I am not able to understand this error:
When I compile with gcc -std=c++17 the following warning messages are displayed:
src/xerus/ttNetwork.cpp: In static member function ‘static xerus::TTNetwork<isOperator> xerus::TTNetwork<isOperator>::dirac(std::vector<long unsigned int>, const std::vector<long unsigned int>&)’:
src/xerus/ttNetwork.cpp:274:66: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
result.set_component(i, Tensor::dirac({1, result.dimensions[i], result.dimensions[numComponents+i], 1}, _position[i]*result.dimensions[numComponents+i] + _position[numComponents+i]));
^~~~~~~~~~
src/xerus/ttNetwork.cpp:274:88: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
result.set_component(i, Tensor::dirac({1, result.dimensions[i], result.dimensions[numComponents+i], 1}, _position[i]*result.dimensions[numComponents+i] + _position[numComponents+i]));
^~~~~~~~~~
src/xerus/ttNetwork.cpp:274:141: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
_component(i, Tensor::dirac({1, result.dimensions[i], result.dimensions[numComponents+i], 1}, _position[i]*result.dimensions[numComponents+i] + _position[numComponents+i]));
^~~~~~~~~~
src/xerus/ttNetwork.cpp:276:66: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
result.set_component(i, Tensor::dirac({1, result.dimensions[i], 1}, _position[i]));
^~~~~~~~~~
In file included from include/xerus/misc/containerSupport.h:37:0,
from include/xerus/ttNetwork.h:28,
from src/xerus/ttNetwork.cpp:28:
src/xerus/ttNetwork.cpp: In static member function ‘static bool xerus::TTNetwork<isOperator>::specialized_sum_f(std::unique_ptr<xerus::internal::IndexedTensorMoveable<xerus::TensorNetwork> >&, xerus::internal::IndexedTensorReadOnly<xerus::TensorNetwork>&&, xerus::internal::IndexedTensorReadOnly<xerus::TensorNetwork>&&)’:
src/xerus/ttNetwork.cpp:1055:36: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
INTERNAL_CHECK(ttOther.dimensions == stackOther->dimensions, "Ie");
^
include/xerus/misc/check.h:68:8: note: in definition of macro ‘XERUS_INTERNAL_CHECK’
if(!(condition)) { \
^~~~~~~~~
src/xerus/ttNetwork.cpp:1055:13: note: in expansion of macro ‘INTERNAL_CHECK’
INTERNAL_CHECK(ttOther.dimensions == stackOther->dimensions, "Ie");
^~~~~~~~~~~~~~
Any idea,
Cheers Micha