diff --git a/dune/gdt/discretefunction/default.hh b/dune/gdt/discretefunction/default.hh
index 4f7363f46ccfff4a7d3eafc3013008df5d5b52cf..6d6ec5fde66c9bf9be705c88b1523541d6870dc6 100644
--- a/dune/gdt/discretefunction/default.hh
+++ b/dune/gdt/discretefunction/default.hh
@@ -26,17 +26,33 @@
 
 namespace Dune {
 namespace GDT {
+namespace internal {
 
 
-template <class Vector, class GridView, size_t range_dim = 1, size_t range_dim_cols = 1, class RangeField = double>
-class ConstDiscreteFunction
-    : public XT::Functions::
-          GridFunctionInterface<XT::Grid::extract_entity_t<GridView>, range_dim, range_dim_cols, RangeField>
+template <class Vector, class GridView>
+struct AssertArgumentsOfConstDiscreteFunction
 {
   static_assert(XT::LA::is_vector<Vector>::value, "");
+  static_assert(XT::Grid::is_view<GridView>::value, "");
+  using E = XT::Grid::extract_entity_t<GridView>;
+};
+
+
+} // namespace internal
+
 
-  using BaseType =
-      XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridView>, range_dim, range_dim_cols, RangeField>;
+template <class Vector, class GridView, size_t range_dim = 1, size_t range_dim_cols = 1, class RangeField = double>
+class ConstDiscreteFunction : public XT::Functions::GridFunctionInterface<
+                                  typename internal::AssertArgumentsOfConstDiscreteFunction<Vector, GridView>::E,
+                                  range_dim,
+                                  range_dim_cols,
+                                  RangeField>
+{
+  using BaseType = XT::Functions::GridFunctionInterface<
+      typename internal::AssertArgumentsOfConstDiscreteFunction<Vector, GridView>::E,
+      range_dim,
+      range_dim_cols,
+      RangeField>;
   using ThisType = ConstDiscreteFunction<Vector, GridView, range_dim, range_dim_cols, RangeField>;
 
 public:
@@ -79,6 +95,13 @@ public:
     return std::make_unique<ConstLocalDiscreteFunctionType>(space_, dofs_);
   }
 
+  std::unique_ptr<ConstLocalDiscreteFunctionType> local_discrete_function(const ElementType& grid_element) const
+  {
+    auto ldf = local_discrete_function();
+    ldf->bind(grid_element);
+    return ldf;
+  }
+
   /**
    * \name ``These methods are required by XT::Functions::GridFunctionInterface.''
    * \{
@@ -128,9 +151,9 @@ private:
 
 template <class V, class GV, size_t r, size_t rC, class R>
 ConstDiscreteFunction<typename XT::LA::VectorInterface<V>::derived_type, GV, r, rC, R>
-make_const_discrete_function(const SpaceInterface<GV, r, rC, R>& space,
-                             const XT::LA::VectorInterface<V>& vector,
-                             const std::string nm = "dune.gdt.constdiscretefunction")
+make_discrete_function(const SpaceInterface<GV, r, rC, R>& space,
+                       const XT::LA::VectorInterface<V>& vector,
+                       const std::string nm = "dune.gdt.constdiscretefunction")
 {
   return ConstDiscreteFunction<typename XT::LA::VectorInterface<V>::derived_type, GV, r, rC, R>(
       space, vector.as_imp(), nm);
@@ -194,6 +217,13 @@ public:
     return std::make_unique<LocalDiscreteFunctionType>(space_, dofs_);
   }
 
+  std::unique_ptr<LocalDiscreteFunctionType> local_discrete_function(const ElementType& grid_element)
+  {
+    auto ldf = local_discrete_function();
+    ldf->bind(grid_element);
+    return ldf;
+  }
+
   /**
    * \name ``These methods are required by XT::Functions::GridFunctionInterface.''
    * \{