std::mutex incompatible with C++/CLI

FWIW…

I added a temporary wrapper class to my C++/CLI project to avoid #including vtkTransform.h directly. The code is below. I set the compiler option for that wrapper class to be non-managed (“No Common Language RunTime Support”). Then all my managed code uses this wrapper class. YMMV on the methods you have to expose through the wrapper… I exposed just the ones I needed. In the end, when this is fixed in VTK 9.3 (or whatever), I’ll just revert back from using vtkTransformWrapper instances to vtkTransform instances.

vtkTransformWrapper.h:

#pragma once

class vtkTransform;
class vtkProp3D;
class vtkCamera;

class vtkTransformWrapper
{
public:

    vtkTransformWrapper();
    ~vtkTransformWrapper();

    void Delete();

    static vtkTransformWrapper* New();

    void Translate(double x, double y, double z);
    void Scale(double x, double y, double z);
    void PostMultiply();
    void RotateWXYZ(double angle, double x, double y, double z);

    vtkTransform* GetTransform();

    void SetPropUserTransform(vtkProp3D* prop);
    void ApplyCameraTransform(vtkCamera* cam);

protected:

    vtkTransform* _theTransform = nullptr;
};

vtkTransformWrapper.cpp

#include "stdafx.h"
#include "vtkTransformWrapper.h"
#include "vtkTransform.h"
#include "vtkProp3D.h"
#include "vtkCamera.h"

vtkTransformWrapper::vtkTransformWrapper()
{
    _theTransform = vtkTransform::New();
}

vtkTransformWrapper::~vtkTransformWrapper()
{
    if (_theTransform != nullptr) 
    { 
        _theTransform->Delete();
        _theTransform = nullptr;
    }
}

void vtkTransformWrapper::Delete()
{
    delete this;
}

vtkTransformWrapper* vtkTransformWrapper::New()
{
    return new vtkTransformWrapper();
}

void vtkTransformWrapper::Translate(double x, double y, double z)
{
    if (_theTransform != nullptr)
    {
        _theTransform->Translate(x, y, z);
    }
}

void vtkTransformWrapper::Scale(double x, double y, double z)
{
    if (_theTransform != nullptr)
    {
        _theTransform->Scale(x, y, z);
    }
}

void vtkTransformWrapper::PostMultiply()
{
    if (_theTransform != nullptr)
    {
        _theTransform->PostMultiply();
    }
}

void vtkTransformWrapper::RotateWXYZ(double angle, double x, double y, double z)
{
    if (_theTransform != nullptr)
    {
        _theTransform->RotateWXYZ(angle, x, y, z);
    }
}

vtkTransform* vtkTransformWrapper::GetTransform()
{
    return _theTransform;
}

void vtkTransformWrapper::SetPropUserTransform(vtkProp3D* prop)
{
    prop->SetUserTransform(_theTransform);
}

void vtkTransformWrapper::ApplyCameraTransform(vtkCamera* cam)
{
    cam->ApplyTransform(_theTransform);
}