title: Compile Error while building CPP with Pybind11 for Python in Visual Studio 2017
body: <p>This query with respect to the tutorial titled <a href="https://docs.microsoft.com/en-us/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2017#create-the-core-c-projects" rel="nofollow noreferrer">Create a C++ extension for Python</a> in Microsoft Docs.</p>
  
  <p>I have done all instructions as per the tutorial. I am using a Windows 10 64-bit and have multiple python versions installed, which I usually call <code>py -x.x-xx sample.py</code>. Over this I have installed Visual Studio 2017 with Python development option which includes both Python 3.6 32-bit and 64-bit.</p>
  
  <p>There are two ways shown in the tutorial: (1) <a href="https://docs.microsoft.com/en-us/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2017#cpython-extensions" rel="nofollow noreferrer"><strong>CPython extensions</strong></a> and (2) <a href="https://docs.microsoft.com/en-us/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2017#pybind11" rel="nofollow noreferrer"><strong>Pybind11</strong></a>. I am getting multiple errors with both of them. However, I have decided to pursue the <strong>Pybind11</strong> way and therefore listing the errors related to it, as it's cleaner and requires very little changes to an original C++ code. </p>
  
  <p>This is the piece of <code>module.cpp</code> file:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>#include &lt;pybind11/pybind11.h&gt;
  #include &lt;Windows.h&gt;
  #include &lt;cmath&gt;
  
  const double e = 2.7182818284590452353602874713527;
  
  double sinh_impl(double x) {
      return (1 - pow(e, (-2 * x))) / (2 * pow(e, -x));
  }
  
  double cosh_impl(double x) {
      return (1 + pow(e, (-2 * x))) / (2 * pow(e, -x));
  }
  
  double tanh_impl(double x) {
      return sinh_impl(x) / cosh_impl(x);
  }
  
  namespace py = pybind11;
  
  PYBIND11_MODULE(superfastcode2, m) {
      m.def("fast_tanh2", &amp;tanh_impl, R"pbdoc(
          Compute a hyperbolic tangent of a single argument expressed in radians.
      )pbdoc");
  
  #ifdef VERSION_INFO
      m.attr("__version__") = VERSION_INFO;
  #else
      m.attr("__version__") = "dev";
  #endif
  }
  </code></pre>
  
  <p>When I try to build as per the instructions in the tutorial, the following is the error generated in the log:</p>
  
  <pre class="lang-none prettyprint-override"><code>  module.cpp
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(49): error C2061: syntax error: identifier 'Py_buffer'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(49): error C2535: 'pybind11::buffer_info::buffer_info(void)': member function already defined or declared
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(26): note: see declaration of 'pybind11::buffer_info::buffer_info'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(87): error C2143: syntax error: missing ';' before '*'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(87): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(87): error C2238: unexpected token(s) preceding ';'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(50): error C2065: 'view': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(51): error C2065: 'view': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(50): error C2661: 'pybind11::buffer_info::buffer_info': no overloaded function takes 2 arguments
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(52): error C2039: 'view': is not a member of 'pybind11::buffer_info'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(17): note: see declaration of 'pybind11::buffer_info'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(52): error C2065: 'view': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(71): error C2065: 'view': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(71): error C2039: 'view': is not a member of 'pybind11::buffer_info'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(17): note: see declaration of 'pybind11::buffer_info'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(77): error C2065: 'view': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(77): error C3861: 'PyBuffer_Release': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\buffer_info.h(77): error C2541: 'delete': cannot delete objects that are not pointers
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(406): error C3861: 'PyInstanceMethod_Check': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(407): error C3861: 'PyInstanceMethod_GET_FUNCTION': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(410): error C3861: 'PyMethod_Check': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(411): error C3861: 'PyMethod_GET_FUNCTION': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(613): error C2065: 'PyListObject': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(613): error C2059: syntax error: ')'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(613): error C2612: trailing '(' illegal in base/member initializer list
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(678): error C2039: 'sequence_slow_readwrite': is not a member of 'pybind11::detail::iterator_policies'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(595): note: see declaration of 'pybind11::detail::iterator_policies'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(678): error C2065: 'sequence_slow_readwrite': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(678): error C2923: 'pybind11::detail::generic_iterator': 'sequence_slow_readwrite' is not a valid template type argument for parameter 'Policy'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(679): error C2039: 'dict_readonly': is not a member of 'pybind11::detail::iterator_policies'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(595): note: see declaration of 'pybind11::detail::iterator_policies'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(679): error C2065: 'dict_readonly': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(679): error C2923: 'pybind11::detail::generic_iterator': 'dict_readonly' is not a valid template type argument for parameter 'Policy'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(779): error C2027: use of undefined type '_typeobject'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\object.h(344): note: see declaration of '_typeobject'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(779): error C2065: '_PyObject_NextNotImplemented': undeclared identifier
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(832): error C2039: 'PyIterable_Check': is not a member of 'pybind11::detail'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(402): note: see declaration of 'pybind11::detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(832): error C3861: 'PyIterable_Check': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(839): error C2039: 'PyUnicode_Check_Permissive': is not a member of 'pybind11::detail'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(402): note: see declaration of 'pybind11::detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(839): error C3861: 'PyUnicode_Check_Permissive': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(934): error C2440: 'initializing': cannot convert from 'const pybind11::str' to 'pybind11::object'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(934): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(935): error C2027: use of undefined type 'pybind11::str'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(21): note: see declaration of 'pybind11::str'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(936): error C2027: use of undefined type 'pybind11::str'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(21): note: see declaration of 'pybind11::str'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(963): error C2039: 'PyNone_Check': is not a member of 'pybind11::detail'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(402): note: see declaration of 'pybind11::detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(963): error C3861: 'PyNone_Check': identifier not found
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1012): error C2039: 'enable_if_t': is not a member of 'pybind11::detail::detail'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(984): note: see declaration of 'pybind11::detail::detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1012): error C2947: expecting '&gt;' to terminate template-parameter-list, found '&lt;'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1012): warning C4346: 'value': dependent name is not a type
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1012): note: prefix with 'typename' to indicate a type
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1012): error C2061: syntax error: identifier 'value'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1013): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1029): error C2039: 'enable_if_t': is not a member of 'pybind11::detail::detail'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(984): note: see declaration of 'pybind11::detail::detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1029): error C2947: expecting '&gt;' to terminate template-parameter-list, found '&lt;'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1029): warning C4346: 'value': dependent name is not a type
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1029): note: prefix with 'typename' to indicate a type
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1029): error C2061: syntax error: identifier 'value'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1030): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1301): error C2244: 'pybind11::detail::object_api&lt;Derived&gt;::begin': unable to match function definition to an existing declaration
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1301): note: see declaration of 'pybind11::detail::object_api&lt;Derived&gt;::begin'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1301): note: definition
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1301): note: 'pybind11::detail::iterator pybind11::detail::object_api&lt;Derived&gt;::begin(void) const'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1301): note: existing declarations
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1301): note: 'pybind11::iterator pybind11::detail::object_api&lt;Derived&gt;::begin(void) const'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1302): error C2244: 'pybind11::detail::object_api&lt;Derived&gt;::end': unable to match function definition to an existing declaration
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1302): note: see declaration of 'pybind11::detail::object_api&lt;Derived&gt;::end'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1302): note: definition
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1302): note: 'pybind11::detail::iterator pybind11::detail::object_api&lt;Derived&gt;::end(void) const'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1302): note: existing declarations
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1302): note: 'pybind11::iterator pybind11::detail::object_api&lt;Derived&gt;::end(void) const'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1303): error C2888: 'pybind11::detail::item_accessor pybind11::detail::object_api&lt;Derived&gt;::operator [](pybind11::handle) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1306): error C2988: unrecognizable template declaration/definition
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1306): error C2059: syntax error: 'const'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1306): error C2143: syntax error: missing ';' before '{'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1306): error C2447: '{': missing function header (old-style formal list?)
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1309): error C2888: 'pybind11::detail::obj_attr_accessor pybind11::detail::object_api&lt;Derived&gt;::attr(pybind11::handle) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1312): error C2988: unrecognizable template declaration/definition
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1312): error C2059: syntax error: 'const'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1312): error C2143: syntax error: missing ';' before '{'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1312): error C2447: '{': missing function header (old-style formal list?)
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1315): error C2888: 'pybind11::detail::args_proxy pybind11::detail::object_api&lt;Derived&gt;::operator *(void) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1317): error C2027: use of undefined type 'pybind11::detail::args_proxy'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(25): note: see declaration of 'pybind11::detail::args_proxy'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1318): error C2888: 'bool pybind11::detail::object_api&lt;Derived&gt;::contains(T &amp;&amp;) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1323): error C2888: 'pybind11::str pybind11::detail::object_api&lt;Derived&gt;::str(void) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1323): error C2027: use of undefined type 'pybind11::str'
    c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(21): note: see declaration of 'pybind11::str'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1326): error C2888: 'pybind11::detail::str_attr_accessor pybind11::detail::object_api&lt;Derived&gt;::doc(void) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\pytypes.h(1329): error C2888: 'pybind11::handle pybind11::detail::object_api&lt;Derived&gt;::get_type(void) const': symbol cannot be defined within namespace 'detail'
  c:\program files (x86)\microsoft visual studio\shared\python36_86\include\pybind11\detail\typeid.h(22): fatal error C1903: unable to recover from previous error(s); stopping compilation
  </code></pre>