diff --git a/vtkm/exec/internal/testing/UnitTestVariant.cxx b/vtkm/exec/internal/testing/UnitTestVariant.cxx index 25dcfd32a..64834a369 100644 --- a/vtkm/exec/internal/testing/UnitTestVariant.cxx +++ b/vtkm/exec/internal/testing/UnitTestVariant.cxx @@ -444,6 +444,8 @@ void TestCastAndCall() variant1.CastAndCall(TestFunctorModify{}, 1); VTKM_TEST_ASSERT(variant1.Get<1>().Value == 2, "Variant object not updated."); + + variant1.CastAndCall([](auto& object) { ++object.Value; }); } void TestCopyInvalid() diff --git a/vtkm/internal/VariantImpl.h b/vtkm/internal/VariantImpl.h index 5533477cc..7e586b6de 100644 --- a/vtkm/internal/VariantImpl.h +++ b/vtkm/internal/VariantImpl.h @@ -510,7 +510,6 @@ public: template VTK_M_DEVICE auto CastAndCall(Functor&& f, Args&&... args) const noexcept(noexcept(f(std::declval&>(), args...))) - -> decltype(f(std::declval&>(), args...)) { VTKM_ASSERT(this->IsValid()); return detail::VariantCastAndCallImpl( @@ -521,7 +520,6 @@ public: VTK_M_DEVICE auto CastAndCall(Functor&& f, Args&&... args) noexcept(noexcept(f(std::declval&>(), args...))) - -> decltype(f(std::declval&>(), args...)) { VTKM_ASSERT(this->IsValid()); return detail::VariantCastAndCallImpl(