yes, provided that a is a constant.
Code:
//untested, may have typos
#include <type_traits>
enum{
DETERMINING_QUANTITY = 300
}
typedef std::conditional< DETERMINING_QUANTITY < 4294967296ll, int, long long>::type ConditionalType;
ConditionalType conditionally_typed_variable;
void foo(int x);
void foo(long long x);
int main(){
//this calls the right version of foo
foo(conditionally_typed_variable);
}
EDIT: If a is not a constant, then something like this may work:
Code:
void foo(int x);
void foo(long long x);
int main(){
int determining_quantity = 300;
long long determining_variable;
if(determining_quantity <4294967296ll )
foo(static_cast<int>(determining_variable));
else
foo(determining_variable);
}