Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 13194)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 13195)
@@ -24,4 +24,5 @@
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
@@ -311,5 +312,5 @@
                     try {
                         final String val = ai.val instanceof Expression
-                                ? (String) ((Expression) ai.val).evaluate(new Environment())
+                                ? Optional.of(((Expression) ai.val).evaluate(new Environment())).map(Object::toString).orElse(null)
                                 : ai.val instanceof String
                                 ? (String) ai.val
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 13194)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 13195)
@@ -263,3 +263,15 @@
         doTestNaturalWood(14289, "example2.osm", 3, 3);
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/15641">Bug #15641</a>.
+     * @throws ParseException if an error occurs
+     */
+    @Test
+    public void testTicket15641() throws ParseException {
+        assertNotNull(buildTagChecker(
+                "relation[type=public_transport][public_transport=stop_area_group] > way {" +
+                "  throwWarning: eval(count(parent_tags(public_transport)));" +
+                "}"));
+    }
 }
