A unique_ptr problem with clang on MinGW
A patch has been submitted by Jonathan Wakely on 06/15 and this should be fixed on trunk.
The following:
#include
int main() {
using namespace std;
unique_ptr up( new int( 30 ) );
}
generates:
$ clang++ -std=c++11 -Wall foo.cpp -o foo
In file included from vector.cpp:1:
In file included from c:/MinGW/lib/gcc/mingw32/4.6.2/include/c++\memory:75:
c:/MinGW/lib/gcc/mingw32/4.6.2/include/c++\ext/concurrence.h:228:2: error: no
matching function for call to '_S_destroy'
_S_destroy(&_M_mutex);
^~~~~~~~~~
c:/MinGW/lib/gcc/mingw32/4.6.2/include/c++\ext/concurrence.h:273:7: note:
candidate template ignored: substitution failure [with _Rm =
__gthread_recursive_mutex_t]: non-type template argument evaluates to 4,
which cannot be narrowed to type 'bool'
_S_destroy(_Rm* __mx)
^
c:/MinGW/lib/gcc/mingw32/4.6.2/include/c++\ext/concurrence.h:282:7: note:
candidate template ignored: substitution failure [with _Rm =
__gthread_recursive_mutex_t]: no member named 'actual' in
'__gthread_recursive_mutex_t'
_S_destroy(_Rm* __mx)
^
c:/MinGW/lib/gcc/mingw32/4.6.2/include/c++\ext/concurrence.h:290:7: note:
candidate template ignored: substitution failure [with _Rm =
__gthread_recursive_mutex_t]: no type named '__type' in
'__gnu_cxx::__enable_if'
_S_destroy(_Rm* __mx)
^
1 error generated.
I am using clang 3.2 version:
clang version 3.2 (trunk 157115) (llvm/trunk 157155)
Target: i686-pc-mingw32
Thread model: posix
This wasn’t reproducible on the gcc versions I use, namely 4.6.2 and 4.7.0. Richard Smith was kind enough to investigate and found this was an issue with a SFINAE failure in libstdc++. (Richard has filed a bug against this!)
The workaround seems to be patching the appropriate header (ext/concurrence.h:273) yourself. There are two approaches:
- Richard’s suggestion:
static typename __enable_if<(bool)sizeof(&_Rm::sema), void>::__type - If you don’t prefer casts:
static typename __enable_if::__type
About this entry
You’re currently reading “A unique_ptr problem with clang on MinGW,” an entry on Mostly Buggy
- Published:
- June 6, 2012 / 4:09 pm
- Category:
- programming, stl
- Tags:
- c++, clang, gcc, std::unique_ptr, windows
No comments yet
Jump to comment form | comment rss [?] | trackback uri [?]