### Godot version

master [f7bc653cbe81018fe362472a0143b7153a52f929]

### System information

Arch Linux (GCC 13.2.1)

### Issue description

Output:

```
In file included from tests/test_main.cpp:118:
./tests/servers/rendering/test_shader_preprocessor.h: In function 'bool TestShaderPreprocessor::is_operator_char(unsigned char)':
./tests/servers/rendering/test_shader_preprocessor.h:55:34: error: variable 'const std::string operators' has initializer but incomplete type
   55 |         static const std::string operators = "<>=+-*/";
      |                                  ^~~~~~~~~
./tests/servers/rendering/test_shader_preprocessor.h:56:50: error: incomplete type 'std::string' {aka 'std::__cxx11::basic_string<char>'} used in nested name specifier
   56 |         return operators.find(c) != std::string::npos;
      |                                                  ^~~~
scons: *** [tests/test_main.linuxbsd.editor.dev.x86_64.san.o] Error 1
scons: building terminated because of errors.
```

### Steps to reproduce

Compile the project. Probably needs GCC 13.

### Minimal reproduction project

N/A
}
#define CHECK_SHADER_EQ(a, b) CHECK_EQ(compact_spaces(a), compact_spaces(b))
#define CHECK_SHADER_NE(a, b) CHECK_NE(compact_spaces(a), compact_spaces(b))
TEST_CASE("[ShaderPreprocessor] Simple defines") {
	String code(
			"#define X 1.0 // comment\n"
			"#define Y mix\n"
			"#define Z X\n"
			"\n"
			"#define func0 \\\n"
			"  vec3 my_fun(vec3 arg) {\\\n"
			"    return pow(arg, 2.2);\\\n"
			"  }\n"
			"\n"
			"func0\n"
			"\n"
			"fragment() {\n"
			"  ALBEDO = vec3(X);\n"
			"  float x = Y(0., Z, X);\n"
			"  #undef X\n"
			"  float X = x;\n"
			"  x = -Z;\n"
			"}\n");
	String expected(
			"vec3 my_fun(vec3 arg) { return pow(arg, 2.2); }\n"
			"\n"
			"fragment() {\n"
			"  ALBEDO = vec3( 1.0 );\n"
			"  float x = mix(0., 1.0 , 1.0 );\n"
			"  float X = x;\n"