Martchus / cpp-utilities

Common C++ classes and routines used by my applications such as argument parser, IO and conversion utilities
GNU General Public License v2.0
52 stars 18 forks source link

Cygwin #1

Closed ghost closed 7 years ago

ghost commented 7 years ago

Building on Cygwin fails spectacularly:

  1. Install cmake, git, make, mingw64-x86_64-gcc-g++, mingw64-x86_64-win-iconv

  2. Run

    cmake -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
    -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
    -DCMAKE_FIND_ROOT_PATH=/usr/x86_64-w64-mingw32/sys-root/mingw -DNO_DOXYGEN=1
  3. make

Result:

Scanning dependencies of target c++utilities
[  4%] Building CXX object CMakeFiles/c++utilities.dir/application/argumentparser.cpp.o
[  9%] Building CXX object CMakeFiles/c++utilities.dir/application/commandlineutils.cpp.o
[ 14%] Building CXX object CMakeFiles/c++utilities.dir/application/failure.cpp.o
[ 19%] Building CXX object CMakeFiles/c++utilities.dir/application/fakeqtconfigarguments.cpp.o
[ 23%] Building CXX object CMakeFiles/c++utilities.dir/chrono/datetime.cpp.o
[ 28%] Building CXX object CMakeFiles/c++utilities.dir/chrono/period.cpp.o
[ 33%] Building CXX object CMakeFiles/c++utilities.dir/chrono/timespan.cpp.o
[ 38%] Building CXX object CMakeFiles/c++utilities.dir/conversion/conversionexception.cpp.o
[ 42%] Building CXX object CMakeFiles/c++utilities.dir/conversion/stringconversion.cpp.o
/Desktop/cpp-utilities/conversion/stringconversion.cpp: In instantiation of ‘ConversionUtilities::StringData ConversionUtilities::ConversionDescriptor<OutputSizeHint>::convertString(const char*, size_t) [with OutputSizeHint = ConversionUtilities::Factor; ConversionUtilities::StringData = std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>; size_t = long long unsigned int]’:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:109:131:   required from here
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: error: no matching function for call to ‘std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>::pair(char*&, long long int)’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note: candidate: template<class ... _Args1, long long unsigned int ..._Indexes1, class ... _Args2, long long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::tuple<_Elements ...>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘std::piecewise_construct_t’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class _U2, class = typename
                                      ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note: candidate: template<class _U2, class> constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
  constexpr pair(const _T1& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note: candidate: template<class _U1, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
  constexpr pair(_U1&& __x, const _T2& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:131:27: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class = typename
                           ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       constexpr pair(pair&&) = default;
                 ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note:   candidate expects 1 argument, 2 provided
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  constexpr pair(const pair<_U1, _U2>& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘const std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note: candidate: constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair(const _T1& __a, const _T2& __b)
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note:   no known conversion for argument 1 from ‘char*’ to ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note: candidate: constexpr std::pair<_T1, _T2>::pair() [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair()
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note:   candidate expects 0 arguments, 2 provided
/Desktop/cpp-utilities/conversion/stringconversion.cpp: In instantiation of ‘ConversionUtilities::StringData ConversionUtilities::ConversionDescriptor<OutputSizeHint>::convertString(const char*, size_t) [with OutputSizeHint = ConversionUtilities::Double; ConversionUtilities::StringData = std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>; size_t = long long unsigned int]’:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:118:65:   required from here
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: error: no matching function for call to ‘std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>::pair(char*&, long long int)’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note: candidate: template<class ... _Args1, long long unsigned int ..._Indexes1, class ... _Args2, long long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::tuple<_Elements ...>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘std::piecewise_construct_t’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class _U2, class = typename
                                      ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note: candidate: template<class _U2, class> constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
  constexpr pair(const _T1& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note: candidate: template<class _U1, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
  constexpr pair(_U1&& __x, const _T2& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:131:27: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class = typename
                           ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       constexpr pair(pair&&) = default;
                 ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note:   candidate expects 1 argument, 2 provided
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  constexpr pair(const pair<_U1, _U2>& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘const std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note: candidate: constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair(const _T1& __a, const _T2& __b)
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note:   no known conversion for argument 1 from ‘char*’ to ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note: candidate: constexpr std::pair<_T1, _T2>::pair() [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair()
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note:   candidate expects 0 arguments, 2 provided
/Desktop/cpp-utilities/conversion/stringconversion.cpp: In instantiation of ‘ConversionUtilities::StringData ConversionUtilities::ConversionDescriptor<OutputSizeHint>::convertString(const char*, size_t) [with OutputSizeHint = ConversionUtilities::Half; ConversionUtilities::StringData = std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>; size_t = long long unsigned int]’:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:127:65:   required from here
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: error: no matching function for call to ‘std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>::pair(char*&, long long int)’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note: candidate: template<class ... _Args1, long long unsigned int ..._Indexes1, class ... _Args2, long long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::tuple<_Elements ...>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘std::piecewise_construct_t’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class _U2, class = typename
                                      ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note: candidate: template<class _U2, class> constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
  constexpr pair(const _T1& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note: candidate: template<class _U1, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
  constexpr pair(_U1&& __x, const _T2& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:131:27: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class = typename
                           ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       constexpr pair(pair&&) = default;
                 ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note:   candidate expects 1 argument, 2 provided
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  constexpr pair(const pair<_U1, _U2>& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘const std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note: candidate: constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair(const _T1& __a, const _T2& __b)
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note:   no known conversion for argument 1 from ‘char*’ to ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note: candidate: constexpr std::pair<_T1, _T2>::pair() [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair()
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note:   candidate expects 0 arguments, 2 provided
/Desktop/cpp-utilities/conversion/stringconversion.cpp: In instantiation of ‘ConversionUtilities::StringData ConversionUtilities::ConversionDescriptor<OutputSizeHint>::convertString(const char*, size_t) [with OutputSizeHint = ConversionUtilities::Keep; ConversionUtilities::StringData = std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>; size_t = long long unsigned int]’:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:154:65:   required from here
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: error: no matching function for call to ‘std::pair<std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>, long long unsigned int>::pair(char*&, long long int)’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note: candidate: template<class ... _Args1, long long unsigned int ..._Indexes1, class ... _Args2, long long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:206:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::tuple<_Elements ...>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:155:9: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘std::piecewise_construct_t’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:150:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:144:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class _U2, class = typename
                                      ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note: candidate: template<class _U2, class> constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
  constexpr pair(const _T1& __x, _U2&& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:138:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   cannot convert ‘outputBuffer’ (type ‘char*’) to type ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note: candidate: template<class _U1, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
  constexpr pair(_U1&& __x, const _T2& __y)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:133:12: note:   template argument deduction/substitution failed:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:131:27: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class = typename
                           ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       constexpr pair(pair&&) = default;
                 ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:128:17: note:   candidate expects 1 argument, 2 provided
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  constexpr pair(const pair<_U1, _U2>& __p)
            ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:124:12: note:   template argument deduction/substitution failed:
/Desktop/cpp-utilities/conversion/stringconversion.cpp:88:75: note:   mismatched types ‘const std::pair<_T1, _T2>’ and ‘char*’
         return StringData(outputBuffer, currentOutputOffset - outputBuffer);
                                                                           ^
In file included from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_algobase.h:64:0,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/char_traits.h:39,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/string:40,
                 from /usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/stdexcept:39,
                 from /Desktop/cpp-utilities/conversion/conversionexception.h:6,
                 from /Desktop/cpp-utilities/conversion/stringconversion.h:4,
                 from /Desktop/cpp-utilities/conversion/stringconversion.cpp:1:
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note: candidate: constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair(const _T1& __a, const _T2& __b)
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:112:26: note:   no known conversion for argument 1 from ‘char*’ to ‘const std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>&’
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note: candidate: constexpr std::pair<_T1, _T2>::pair() [with _T1 = std::unique_ptr<char [], ConversionUtilities::StringDataDeleter>; _T2 = long long unsigned int]
       _GLIBCXX_CONSTEXPR pair()
                          ^
/usr/lib/gcc/x86_64-w64-mingw32/5.4.0/include/c++/bits/stl_pair.h:108:26: note:   candidate expects 0 arguments, 2 provided
make[2]: *** [CMakeFiles/c++utilities.dir/build.make:255: CMakeFiles/c++utilities.dir/conversion/stringconversion.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:266: CMakeFiles/c++utilities.dir/all] Error 2
make: *** [Makefile:117: all] Error 2
Martchus commented 7 years ago
  1. I assume GCC version is 5.4.0. This is a little bit old but should work (I currently use GCC 6.2.1 or Clang 3.9.0). Which versions are the other packages?
  2. All errors seem to be related to std::pair. Since it doesn't happen under my build environment it is hard to tell what's the reason.
Martchus commented 7 years ago

Commit https://github.com/Martchus/cpp-utilities/commit/c1e18fcbf590932e2b3f9b27a0781d292a5f77a6 might fix it. I will merge it to master when you can confirm it works.

ghost commented 7 years ago

@Martchus using these commands allows build to complete:

git checkout cygwin_fix
cmake -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
  -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
  -DCMAKE_RC_COMPILER_INIT=x86_64-w64-mingw32-windres \
  -DCMAKE_FIND_ROOT_PATH=/usr/x86_64-w64-mingw32/sys-root/mingw
make

I am now closing this in favor of https://github.com/Martchus/tageditor/issues/12