/*
 *  Copyright 2018 NVIDIA Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

#pragma once

#if   __cplusplus < 201103L
  #define THRUST_CPP03
  #define THRUST_CPP_DIALECT 2003
#elif __cplusplus < 201402L
  #define THRUST_CPP11
  #define THRUST_CPP_DIALECT 2011
#elif __cplusplus < 201703L
  #define THRUST_CPP14
  #define THRUST_CPP_DIALECT 2014
#else
  #define THRUST_CPP17
  #define THRUST_CPP_DIALECT 2017
#endif


/*
 *  Copyright 2018 NVIDIA Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

#pragma once

#ifdef _MSC_VER
  #define THRUST_CPP_VER _MSVC_LANG
#else
  #define THRUST_CPP_VER __cplusplus
#endif

#if   THRUST_CPP_VER < 201103L
  #define THRUST_CPP03
  #define THRUST_CPP_DIALECT 2003
#elif THRUST_CPP_VER < 201402L
  #define THRUST_CPP11
  #define THRUST_CPP_DIALECT 2011
#elif THRUST_CPP_VER < 201703L
  #define THRUST_CPP14
  #define THRUST_CPP_DIALECT 2014
#else
  #define THRUST_CPP17
  #define THRUST_CPP_DIALECT 2017
#endif

#undef THRUST_CPP_VER

Handle MSVC's definition of __cplusplus
 Handle MSVC's definition of __cplusplus

MSVC doesnt define __cplusplus correctly unless a compiler flag is passed (/Zc:__cplusplus) but _MSVC_LANG is defined correctly.
To avoid users needing to pass an extra compile flag, I suggest we handle it in the cpp_dialect.h file
