It seems like you forget to add break after each case. Try following
switch (x)
{
case 0:
{
europeanOption.setPricingEngine(boost::shared_ptr(
new FDEuropeanEngine(bsmProcess, 100,99)));
worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &europeanOption ) );
break;
}
case 1:
{
opt = &bermudanOption;
bermudanOption.setPricingEngine(boost::shared_ptr(
new FDBermudanEngine(bsmProcess,
100,99)));
worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &bermudanOption ) );
break;
}
case 2:
{
americanOption.setPricingEngine(boost::shared_ptr(
new FDAmericanEngine(bsmProcess,
100,99)));
worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &americanOption ) );
break;
}
default:
break;
}