This commit is contained in:
Aria 2025-03-21 22:23:30 +11:00
commit 9c94d113d3
Signed by untrusted user who does not match committer: aria
GPG key ID: 19AB7AA462B8AB3B
10260 changed files with 1237388 additions and 0 deletions

View file

@ -0,0 +1,48 @@
#include "StarCasting.hpp"
using namespace Star;
struct ClassA {
virtual ~ClassA() {}
};
struct ClassB : ClassA {
ClassB(int member) : member(member) {}
virtual ~ClassB() {}
int member;
};
int main(int argc, char** argv) {
ClassA* ptra = new ClassA();
ClassA* ptrb = new ClassB(42);
coutf("%s\n", is<ClassB>(ptra));
coutf("%s\n", is<ClassB>(ptrb));
coutf("%s\n", convert<ClassB>(ptrb)->member);
try {
// Expected to throw exception
coutf("%s\n", convert<ClassB>(ptra)->member);
} catch (std::exception const& e) {
coutf("Expected exception caught: %s\n", e.what());
}
shared_ptr<ClassA> sharedptra = make_shared<ClassA>();
shared_ptr<ClassA> sharedptrb = make_shared<ClassB>(42);
coutf("%s\n", is<ClassB>(sharedptra));
coutf("%s\n", is<ClassB>(sharedptrb));
coutf("%s\n", convert<ClassB>(sharedptrb)->member);
try {
// Expected to throw exception
coutf("%s\n", convert<ClassB>(sharedptra)->member);
} catch (std::exception const& e) {
coutf("Expected exception caught: %s\n", e.what());
}
delete ptra;
delete ptrb;
return 0;
}