Assume I have a class with different constructors:
class A { public: A(char* string) { //... } A(int value) { //.. }
You can't satisfy all your stated requirements.
If you can get rid of the requirement for the object to be on stack, you could use a pointer.
A *a; if (isTrue()) a = new A("string"); else a = new A(10); a->check(); delete a;