title: compiler error: is private within this context only on gcc9 with c++17
body: <p>I test my code using travis. Recently someone added gcc9 to the set of compilers the code gets tested with. While everything compiles fine with gcc8 (both with c++14 and c++17) and gcc-9.1.0 with c++14 it fails with gcc-9.1.0 with c++17 with the following error:</p>
  
  <pre class="lang-sh prettyprint-override"><code>/usr/include/c++/9/functional: In instantiation of ‘std::_Bind&lt;_Functor(_Bound_args ...)&gt;::_Bind(const _Functor&amp;, _Args&amp;&amp; ...) [with _Args = {std::tuple&lt;int&gt;}; _Functor = SQLite::Statement; _Bound_args = {std::tuple&lt;int&gt;}]’:
  /usr/include/c++/9/functional:811:38:   required from ‘typename std::_Bind_helper&lt;std::__is_socketlike&lt;_Func&gt;::value, _Func, _BoundArgs ...&gt;::type std::bind(_Func&amp;&amp;, _BoundArgs&amp;&amp; ...) [with _Func = SQLite::Statement&amp;; _BoundArgs = {std::tuple&lt;int&gt;}; typename std::_Bind_helper&lt;std::__is_socketlike&lt;_Func&gt;::value, _Func, _BoundArgs ...&gt;::type = std::_Bind&lt;SQLite::Statement(std::tuple&lt;int&gt;)&gt;]’
  /home/travis/build/SRombauts/SQLiteCpp/include/SQLiteCpp/ExecuteMany.h:84:9:   required from ‘void SQLite::bind_exec(SQLite::Statement&amp;, std::tuple&lt;_Tps ...&gt;&amp;&amp;) [with Types = {int}]’
  /home/travis/build/SRombauts/SQLiteCpp/include/SQLiteCpp/ExecuteMany.h:50:14:   required from ‘void SQLite::execute_many(SQLite::Database&amp;, const char*, Arg&amp;&amp;, Types&amp;&amp; ...) [with Arg = std::tuple&lt;int&gt;; Types = {std::tuple&lt;int, const char*&gt;, std::tuple&lt;int, const char*&gt;}]’
  /home/travis/build/SRombauts/SQLiteCpp/tests/ExecuteMany_test.cpp:35:9:   required from here
  /usr/include/c++/9/functional:462:59: error: ‘SQLite::Statement::Statement(const SQLite::Statement&amp;)’ is private within this context
    462 |  : _M_f(__f), _M_bound_args(std::forward&lt;_Args&gt;(__args)...)
        |                                                           ^
  In file included from /home/travis/build/SRombauts/SQLiteCpp/include/SQLiteCpp/Column.h:13,
                   from /home/travis/build/SRombauts/SQLiteCpp/include/SQLiteCpp/Database.h:13,
                   from /home/travis/build/SRombauts/SQLiteCpp/tests/ExecuteMany_test.cpp:13:
  /home/travis/build/SRombauts/SQLiteCpp/include/SQLiteCpp/Statement.h:696:5: note: declared private here
    696 |     Statement(const Statement&amp;);
  </code></pre>
  
  <p>the code that throws this error is the following:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;typename Arg, typename... Types&gt;
  void execute_many(Database&amp; aDatabase, const char* apQuery, Arg&amp;&amp; aArg, Types&amp;&amp;... aParams)
  {
      Statement query(aDatabase, apQuery);
      bind_exec(query, std::forward&lt;Arg&gt;(aArg));
      (void)std::initializer_list&lt;int&gt;
      {
          ((void)reset_bind_exec(query, std::forward&lt;Types&gt;(aParams)), 0)...
      };
  }
  
  template &lt;typename TupleT&gt;
  void reset_bind_exec(Statement&amp; apQuery, TupleT&amp;&amp; aTuple)
  {
      apQuery.reset();
      bind_exec(apQuery, std::forward&lt;TupleT&gt;(aTuple));
  }
  
  template &lt;typename TupleT&gt;
  void bind_exec(Statement&amp; apQuery, TupleT&amp;&amp; aTuple)
  {
      bind(apQuery, std::forward&lt;TupleT&gt;(aTuple));
      while (apQuery.executeStep()) {}
  }
  </code></pre>
  
  <p>I use the following code for travis CI to use the corresponding compiler</p>
  
  <pre><code>matrix:
    include:
      - compiler: gcc
        addons:
          apt:
            sources:
              - ubuntu-toolchain-r-test
            packages:
              - g++-9
        env:
          - CC=gcc-9
          - CXX=g++-9
          - CXXFLAGS="-std=c++17 -Wall -Wextra -pedantic"
  
  before_install:
    # coveralls test coverage:
    - if [[ "$CXX" == "g++" ]]; then pip install --user cpp-coveralls ; fi
  
  # scripts to run before build
  before_script:
    - gcc --version
    - mkdir build
    - cd build
    - cmake -DCMAKE_BUILD_TYPE=Debug -DSQLITECPP_USE_GCOV=ON -DSQLITECPP_BUILD_EXAMPLES=ON -DSQLITECPP_BUILD_TESTS=ON ..
  
  # build examples, and run tests (ie make &amp; make test)
  script:
    - cmake --build .
    - ctest --verbose --output-on-failure
  </code></pre>
  
  <p>the class Statement has a private copy constructor and assignment operator, but I wonder why this would cause any issue here, because I do not copy the Statement "query". Especially why this problem only occurs with gcc-9.1.0 with c++17 (on my local machine I use gcc-9.1.1 and it compiles without any errors).</p>