diff --git a/folly/Conv.h b/folly/Conv.h
index e52507fb331..bad4311c4fe 100644
--- a/folly/Conv.h
+++ b/folly/Conv.h
@@ -286,8 +286,8 @@ namespace detail {
 template <class... T>
 using LastElement = type_pack_element_t<sizeof...(T) - 1, T...>;
 
-#ifdef _MSC_VER
-// MSVC can't quite figure out the LastElementImpl::call() stuff
+#if defined(_MSC_VER) || defined(__CUDACC__)
+// MSVC and NVCC can't quite figure out the LastElementImpl::call() stuff
 // in the base implementation, so we have to use tuples instead,
 // which result in significantly more templates being compiled,
 // though the runtime performance is the same.
diff --git a/folly/synchronization/RelaxedAtomic.h b/folly/synchronization/RelaxedAtomic.h
index 9891310b38e..6c7cc76d183 100644
--- a/folly/synchronization/RelaxedAtomic.h
+++ b/folly/synchronization/RelaxedAtomic.h
@@ -108,7 +108,9 @@ struct relaxed_atomic_integral_base : private relaxed_atomic_base<T> {
 
   using base::relaxed_atomic_base;
   using base::operator=;
+#ifndef __CUDACC__
   using base::operator T;
+#endif
   using base::compare_exchange_strong;
   using base::compare_exchange_weak;
   using base::exchange;
@@ -206,7 +208,9 @@ struct relaxed_atomic : detail::relaxed_atomic_base<T> {
 
   using base::relaxed_atomic_base;
   using base::operator=;
+#ifndef __CUDACC__
   using base::operator T;
+#endif
 };
 
 template <typename T>
@@ -220,7 +224,9 @@ struct relaxed_atomic<T*> : detail::relaxed_atomic_base<T*> {
 
   using detail::relaxed_atomic_base<T*>::relaxed_atomic_base;
   using base::operator=;
+#ifndef __CUDACC__
   using base::operator T*;
+#endif
 
   T* fetch_add(std::ptrdiff_t arg) noexcept {
     return atomic::fetch_add(arg, std::memory_order_relaxed);