У меня есть шаблон класса A
, который содержит контейнер указателей (T*
):
template <typename T>
class A {
public:
// ...
private:
std::vector<T*> data;
};
и кучу функций вроде:
void f(const A<const T>&);
void g(const A<const T>&);
Можно ли вызывать эти функции через приведение от A<const T>
к A<T>
?
A<double> a;
...
auto& ac = reinterpret_cast<const A<const double>&>(a);
f(ac);
Я почти уверен, что этот код имеет неопределенное поведение.
Опасно ли использовать такие преобразования в реальной жизни?
this == nullptr
ерунды. - person Baum mit Augen   schedule 09.05.20165.2.10 Reinterpret cast
в стандарте: open -std.org/jtc1/sc22/wg21/docs/papers/2016/n4582.pdf - person Jesper Juhl   schedule 09.05.2016A<const T>
, так и сA<T>
. Я не могу оставить толькоA<T>
и выброситьA<const T>
, иначе я потеряю const-корректность. - person Sergei   schedule 10.05.2016