I wonder - what are cast result in cpp actualy is? And specificly - what are their lifetime?
Consider this example:
#include <iostream>
#include <stdint.h>
using namespace std;
class Foo
{
public:
    Foo(const int8_t & ref)
    : _ptr(&ref)
    {}
    const int8_t & getRef() { return *_ptr; }
private:
    const int8_t * _ptr;
};
enum Bar
{
    SOME_BAR = 100
};
int main()
{
    {
        int32_t value = 50;
        Foo x(static_cast<int16_t>(value));
        std::cout << "casted from int32_t " << x.getRef() << std::endl;
    }
    {
        Bar value = SOME_BAR;
        Foo x(static_cast<int16_t>(value));
        std::cout << "casted from enum " << x.getRef() << std::endl; 
    }
   return 0;
}
Output:
casted from int32_t 50
casted from enum 100
It works - but is is safe? With integers i can imagine that compiller somehow cast a "pointer" to needed part of target variable bytes. But what happens when you cast int to float?