Selaa lähdekoodia

Replace deprecated std::iterator inheritance (#5111)

std::iterator is deprecated since C++17. E.g. when using the standard
library of gcc 12, deprecation warnings are shown.

There is some background info here:
https://www.fluentcpp.com/2018/05/08/std-iterator-deprecated/
Sebastian Neubauer 2 vuotta sitten
vanhempi
commit
d529af3e2b

+ 7 - 3
include/dxc/DXIL/DxilTypeSystem.h

@@ -315,15 +315,19 @@ DXIL::SigPointKind SigPointFromInputQual(DxilParamInputQual Q, DXIL::ShaderKind
 
 void RemapObsoleteSemantic(DxilParameterAnnotation &paramInfo, DXIL::SigPointKind sigPoint, llvm::LLVMContext &Context);
 
-class DxilStructTypeIterator
-    : public std::iterator<std::input_iterator_tag,
-                           std::pair<llvm::Type *, DxilFieldAnnotation *>> {
+class DxilStructTypeIterator {
 private:
   llvm::StructType *STy;
   DxilStructAnnotation *SAnnotation;
   unsigned index;
 
 public:
+  using iterator_category = std::input_iterator_tag;
+  using value_type = std::pair<llvm::Type *, DxilFieldAnnotation *>;
+  using difference_type = std::ptrdiff_t;
+  using pointer = value_type *;
+  using reference = value_type &;
+
   DxilStructTypeIterator(llvm::StructType *sTy,
                          DxilStructAnnotation *sAnnotation, unsigned idx = 0);
   // prefix

+ 7 - 2
include/dxc/DxilContainer/DxilContainer.h

@@ -465,8 +465,13 @@ struct DxilPartIsType {
 };
 
 /// Use this type as an iterator over the part headers.
-struct DxilPartIterator : public std::iterator<std::input_iterator_tag,
-                                               const DxilContainerHeader *> {
+struct DxilPartIterator {
+  using iterator_category = std::input_iterator_tag;
+  using value_type = const DxilContainerHeader *;
+  using difference_type = std::ptrdiff_t;
+  using pointer = value_type *;
+  using reference = value_type &;
+
   const DxilContainerHeader *pHeader;
   uint32_t index;
 

+ 1 - 1
lib/DxilContainer/DxilContainer.cpp

@@ -103,7 +103,7 @@ const DxilPartHeader *GetDxilPartByType(const DxilContainerHeader *pHeader, Dxil
     return nullptr;
   }
   const DxilPartIterator partIter =
-      find_if(begin(pHeader), end(pHeader), DxilPartIsType(fourCC));
+      std::find_if(begin(pHeader), end(pHeader), DxilPartIsType(fourCC));
   if (partIter == end(pHeader)) {
     return nullptr;
   }