I have a Visual Studio project that contains files with managed code and files with unmanaged code. The project has the CLR support, but when I add a file where I do not need .NET I simply turn off the /crl option with a right-click on the file:
I added a class that has to contain unmanaged code and use std::mutex.
// Foo.h
class Foo
{
std::mutex m;
}
I got the following error after compiling:
error C1189: #error : is not supported when compiling with /clr or /clr:pure.
The problem is that I do not have the option to turn off the clr for header files (.h), since this is the window when i right-click on a .h file:
How can I fix this problem?
There is the possibility to use the workaround known as the Pointer To Implementation (pImpl) idiom.
Following is a brief example:
// Foo.h
#include <memory>
class Foo
{
public:
Foo();
// forward declaration to a nested type
struct Mstr;
std::unique_ptr<Mstr> impl;
};
// Foo.cpp
#include <mutex>
struct Foo::Mstr
{
std::mutex m;
};
Foo::Foo()
: impl(new Mstr())
{
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With