diff --git a/include/aidge/operator/Slice.hpp b/include/aidge/operator/Slice.hpp
index 839d873a0035474b4f21114d794cf09db710b64e..6b1077c8d383b1fd4c1ebe6f64a4cad8135c594e 100644
--- a/include/aidge/operator/Slice.hpp
+++ b/include/aidge/operator/Slice.hpp
@@ -102,7 +102,7 @@ public:
             // xxooo               xxxoo
             std::vector<std::size_t> beginningCoords = mInput->getCoord(this->template getAttr<SliceAttr::Beginning>());
             for (std::size_t i = 0; i < DIM; ++i) {
-                if (beginningCoords[i] + this->template getAttr<SliceAttr::SliceDims>()[i] >= mInput->dims()[i]) {
+                if (beginningCoords[i] + this->template getAttr<SliceAttr::SliceDims>()[i] > mInput->dims()[i]) {
                     printf("ROI of Slice operator out of bounds");
                     exit(-1);
                 } else {
@@ -164,7 +164,7 @@ public:
     inline IOIndex_t nbOutputs() const noexcept override final { return 1; }
 };
 
-template <DimIdx_t DIM>
+template <std::size_t DIM>
 inline std::shared_ptr<Node> Slice(std::size_t beginningPos, std::array<DimSize_t, DIM> sliceDims,
                                    const std::string &name = "") {
     // FIXME: properly handle default w&b initialization in every cases