una predefinidas parametros invoca funciones funcion ejemplos dev con como codigos basicas c++ language-lawyer

predefinidas - En C++, ¿puede un reparto de estilo C invocar una función de conversión y luego desechar la constancia?



funciones en dev c++ (1)

Este es el problema central 909 :

De acuerdo con el párrafo 4 [expr.cast] 5.4, una posible interpretación de un reparto de estilo antiguo es como static_cast seguido de const_cast . Por lo tanto, uno esperaría que las expresiones marcadas # 1 y # 2 en el siguiente ejemplo tengan la misma validez y significado:

struct S { operator const int* (); }; void f(S& s) { const_cast<int*>(static_cast<const int*>(s)); // #1 (int*) s; // #2 }

Sin embargo, varias implementaciones emiten un error en # 2.

Es la intención que (T*)x debe interpretarse como algo así como

const_cast<T*>(static_cast<const volatile T*>(x))

Justificación (julio, 2009):

De acuerdo con la interpretación directa de la redacción, el ejemplo debería funcionar. Esto parece ser solo un error del compilador.

Aparentemente, esto nunca fue resuelto ni por Clang ni por GCC. Hora de abrir las entradas.

GCC y Clang rechazan el reparto de estilo C en el siguiente código.

http://coliru.stacked-crooked.com/a/c6fb8797d9d96a27

struct S { typedef const int* P; operator P() { return nullptr; } }; int main() { int* p1 = const_cast<int*>(static_cast<const int*>(S{})); int* p2 = (int*)(S{}); }

main.cpp: In function ''int main()'': main.cpp:7:25: error: invalid cast from type ''S'' to type ''int*'' int* p2 = (int*)(S{}); main.cpp:7:15: error: cannot cast from type ''S'' to pointer type ''int *'' int* p2 = (int*)(S{}); ^~~~~~~~~~~

Sin embargo, de acuerdo con el estándar, un reparto de estilo C puede realizar las conversiones realizadas por static_cast seguido de const_cast . ¿Está este código bien formado? ¿Si no, porque no?