Skip to content

Conversation

misyltoad
Copy link

Allows code like the following to work:

std::string_view pretty_name = my_table["pretty_name"];

Otherwise it fails with:

error: conversion from ‘sol::table_proxy<sol::basic_table_core<false, sol::basic_reference<false> >&, std::tuple<const char (&)[12]> >’ to non-scalar type ‘std::string_view’ {aka ‘std::basic_string_view<char>’} requested
 2131 |                         std::string_view psvPrettyName = tTable["pretty_name"];
      |                                  

Allows code like the following to work:
```cpp
std::string_view pretty_name = my_table["pretty_name"];
```

Otherwise it fails with:

```
error: conversion from ‘sol::table_proxy<sol::basic_table_core<false, sol::basic_reference<false> >&, std::tuple<const char (&)[12]> >’ to non-scalar type ‘std::string_view’ {aka ‘std::basic_string_view<char>’} requested
 2131 |                         std::string_view psvPrettyName = tTable["pretty_name"];
      |                                  
```
@Spacechild1
Copy link

On the one hand, I can see how this can be useful to avoid unnecessary string copies. On the other hand, I think it can be pretty dangerous:

Because Lua has garbage collection, there is no guarantee that the pointer returned by lua_tolstring will be valid after the corresponding Lua value is removed from the stack.

https://www.lua.org/manual/5.3/manual.html#lua_tolstring

This would at least require a big fat warning in the documentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants