     thrust::upper_bound(d_vec.begin(), d_vec.end(), d_input.begin(), d_input.end(), d_output.begin());
 
     ASSERT_ALMOST_EQUAL(h_output, d_output);
+#endif
   }
 };
 VariableUnitTest<TestVectorUpperBound, NumericTypes> TestVectorUpperBoundInstance;

{
  void operator()(const size_t n)
  {
    thrust::host_vector<T>   h_vec = thrusttest::random_integers<T>(n);
    thrust::device_vector<T> d_vec = h_vec;


{
  void operator()(const size_t n)
  {
// XXX an MSVC bug causes problems inside std::stable_sort's implementation:
//     std::lower_bound/upper_bound is confused with thrust::lower_bound/upper_bound
#if (THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_MSVC) && (THRUST_DEVICE_BACKEND == THRUST_DEVICE_BACKEND_OMP)
    KNOWN_FAILURE;
#else
    thrust::host_vector<T>   h_vec = thrusttest::random_integers<T>(n);
    thrust::device_vector<T> d_vec = h_vec;

